php实现凯撒加密算法(php实现凯撒加密算法是什么)

发布时间:2022-11-12

本文目录一览:

  1. 凯撒加密法
  2. 凯撒密码的算法用PHP语言的怎么实现啊?
  3. 凯撒密码实现英文短句的加解密

凯撒加密法

凯撒加密法的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3): 明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ
密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如: 明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
凯撒加密法的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为: $$ E_n(x) = (x + n) \mod 26 $$ 解密就是: $$ D_n(x) = (x - n) \mod 26 $$

凯撒密码的算法用PHP语言的怎么实现啊?

<?php
echo "请输入明文M(注意不要输入空白串)\n";
$m = trim(fgets(STDIN));
$c = '';
for ($i = 0; $i < strlen($m); $i++) {
    $c .= chr((ord(substr($m, $i, 1)) - ord('a') + 3) % 26 + ord('a'));
}
echo "结果是:\n$c\n";
?>

运行示例如下:

E:\ygbphp a.php
请输入明文M(注意不要输入空白串)
123
结果是:
NOP

特别注意:
以上程序在命令提示符下运行,如果要在网页上运行,那么 $m = trim(fgets(STDIN)); 应该修改为 $m = $_GET['m'];,相关原理不在本帖讨论,假设你明白。

凯撒密码实现英文短句的加解密

  1. 将 "We are students." 这个英文词句用 k=4 的凯萨密码翻译成密码。 作为一种最为古老的对称加密体制,它的基本思想是:通过把字母移动一定的位数来实现加密和解密。 例如,如果密匙是把明文字母的位数向后移动三位,那么明文字母B就变成了密文的E,依次类推,X将变成A,Y变成B,Z变成C。由此可见,位数就是凯撒密码加密和解密的密钥。 如:ZHDUHVWXGHQWV(后移三位)
  2. 凯撒密码是计算机C语言编程实现加密和解密。挺复杂的。你可以研究一下哦。
  3. 将凯撒密码(K=7)的加密、解密过程用C语言编程实现:
#include <stdio.h>
#include <ctype.h>
#define maxlen 100
#define K 7
char *KaisaEncode(char *str) // 加密
{
    char *d0 = str;
    for (; *str != '\0'; str++) {
        if (isupper(*str))
            *str = (*str - 'A' + K) % 26 + 'A';
        else if (islower(*str))
            *str = (*str - 'a' + K) % 26 + 'a';
        else
            continue;
    }
    return d0;
}
char *KaisaDecode(char *str) // 解密
{
    char *d0 = str;
    for (; *str != '\0'; str++) {
        if (isupper(*str))
            *str = (*str - 'A' - K + 26) % 26 + 'A';
        else if (islower(*str))
            *str = (*str - 'a' - K + 26) % 26 + 'a';
        else
            continue;
    }
    return d0;
}
int main(void)
{
    char s[maxlen];
    gets(s);
    puts(KaisaEncode(s));
    puts(KaisaDecode(s));
    return 0;
}
  1. 将凯撒密码X的加密、解密过程用C语言编程实现:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <ctype.h>
char encrypt(char ch, int n) /* 加密函数,把字符向右循环移位n */
{
    while (ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z') {
        return ('a' + (ch - 'a' + n) % 26);
    }
    return ch;
}
void menu() /* 菜单 */
{
    clrscr();
    printf("\n=========================================================");
    printf("\n1.Encrypt the file");
    printf("\n2.Decrypt the file");
    printf("\n3.Force decrypt file");
    printf("\n4.Quit\n");
    printf("=========================================================\n");
    printf("Please select a item:");
    return;
}
main()
{
    int i, n;
    char ch0, ch1;
    FILE *in, *out;
    char infile[20], outfile[20];
    textbackground(BLACK);
    textcolor(LIGHTGREEN);
    clrscr();
    sleep(3); /* 等待3秒 */
    menu();
    ch0 = getch();
    while (ch0 != '4') {
        if (ch0 == '1') {
            clrscr();
            printf("\nPlease input the infile:");
            scanf("%s", infile); /* 输入需要加密的文件名 */
            if ((in = fopen(infile, "r")) == NULL) {
                printf("Can not open the infile!\n");
                printf("Press any key to exit!\n");
                getch();
                exit(0);
            }
            printf("Please input the key:");
            scanf("%d", &n); /* 输入加密密码 */
            printf("Please input the outfile:");
            scanf("%s", outfile); /* 输入加密后文件的文件名 */
            if ((out = fopen(outfile, "w")) == NULL) {
                printf("Can not open the outfile!\n");
                printf("Press any key to exit!\n");
                fclose(in);
                getch();
                exit(0);
            }
            while (!feof(in)) /* 加密 */
                fputc(encrypt(fgetc(in), n), out);
            printf("\nEncrypt is over!\n");
            fclose(in);
            fclose(out);
            sleep(1);
        }
        if (ch0 == '2') {
            clrscr();
            printf("\nPlease input the infile:");
            scanf("%s", infile); /* 输入需要解密的文件名 */
            if ((in = fopen(infile, "r")) == NULL) {
                printf("Can not open the infile!\n");
                printf("Press any key to exit!\n");
                getch();
                exit(0);
            }
            printf("Please input the key:");
            scanf("%d", &n); /* 输入解密密码(可以为加密时候的密码) */
            n = 26 - n;
            printf("Please input the outfile:");
            scanf("%s", outfile); /* 输入解密后文件的文件名 */
            if ((out = fopen(outfile, "w")) == NULL) {
                printf("Can not open the outfile!\n");
                printf("Press any key to exit!\n");
                fclose(in);
                getch();
                exit(0);
            }
            while (!feof(in)) {
                fputc(encrypt(fgetc(in), n), out);
            }
            printf("\nDecrypt is over!\n");
            fclose(in);
            fclose(out);
            sleep(1);
        }
        if (ch0 == '3') {
            clrscr();
            printf("\nPlease input the infile:");
            scanf("%s", infile); /* 输入需要解密的文件名 */
            if ((in = fopen(infile, "r")) == NULL) {
                printf("Can not open the infile!\n");
                printf("Press any key to exit!\n");
                getch();
                exit(0);
            }
            printf("Please input the outfile:");
            scanf("%s", outfile); /* 输入解密后文件的文件名 */
            if ((out = fopen(outfile, "w")) == NULL) {
                printf("Can not open the outfile!\n");
                printf("Press any key to exit!\n");
                fclose(in);
                getch();
                exit(0);
            }
            for (i = 1; i <= 25; i++) /* 暴力破解过程,在察看信息正确后,可以按'Q'或者'q'退出 */
            {
                rewind(in);
                rewind(out);
                clrscr();
                printf("==========================================================\n");
                printf("The outfile is:\n");
                printf("==========================================================\n");
                while (!feof(in)) {
                    ch1 = encrypt(fgetc(in), 26 - i);
                    putch(ch1);
                    fputc(ch1, out);
                }
                printf("\n========================================================\n");
                printf("The current key is: %d \n", i); /* 显示当前破解所用密码 */
                printf("Press 'Q' to quit and other key to continue。\n");
                printf("==========================================================\n");
                ch1 = getch();
                if (ch1 == 'q' || ch1 == 'Q') /* 按'Q'或者'q'时退出 */
                {
                    clrscr();
                    printf("\nGood Bye!\n");
                    fclose(in);
                    fclose(out);
                    sleep(3);
                    exit(0);
                }
            }
            printf("\nForce decrypt is over!\n");
            fclose(in);
            fclose(out);
            sleep(1);
        }
        menu();
        ch0 = getch();
    }
    clrscr();
    printf("\nGood Bye!\n");
    sleep(3);
}
  1. 怎样编写程序:实现恺撒密码加密单词 "julus" 用下面程序:新建个txt,放进去任意单词,设置 #define N 5 中的值,实现字母移位,达到加密目的。 本程序提供解密功能:
#include <stdio.h>
#define N 5
void jiami(char namea[256]) {
    FILE *fp_jiami, *fp_file2;
    char c;
    fp_jiami = fopen(namea, "rb");
    fp_file2 = fopen("file2.txt", "wb");
    while (EOF != (fscanf(fp_jiami, "%c", &c))) {
        if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) {
            c += N;
            if (c > 'z') c -= 26;
            if (c > 'Z' && c < 'A') c -= 26;
        }
        fprintf(fp_file2, "%c", c);
    }
    fclose(fp_file2);
    fclose(fp_jiami);
}
void jiemi(char nameb[256]) {
    FILE *fp_jiemi, *fp_file3;
    char d;
    fp_jiemi = fopen(nameb, "rb");
    fp_file3 = fopen("file3.txt", "wb");
    while (EOF != (fscanf(fp_jiemi, "%c", &d))) {
        if ((d >= 'A' && d <= 'Z') || (d >= 'a' && d <= 'z')) {
            d -= N;
            if (d < 'A') d += 26;
            if (d > 'Z' && d < 'a') d += 26;
        }
        fprintf(fp_file3, "%c", d);
    }
    fclose(fp_file3);
    fclose(fp_jiemi);
}
int main() {
    char name[256];
    int n;
    printf("输入你要操作的TXT文本:");
    gets(name);
    printf("\n请选择需要进行的操作:\n");
    printf(" 1:加密 2:解密 \n");
    printf("输入你的选择:");
    scanf("%d", &n);
    switch (n) {
        case 1:
            jiami(name);
            printf("\t加密成功!!\n\n");
            break;
        case 2:
            jiemi(name);
            printf("\t解密成功!!\n\n");
            break;
        default:
            printf("输入操作不存在!");
    }
    return 0;
}
  1. 谁有 PYTHON 编写的凯撒密码的加密和解密代码? 给你写了一个:
def convert(c, key, start='a', n=26):
    a = ord(start)
    offset = ((ord(c) - a + key) % n)
    return chr(a + offset)
def caesarEncode(s, key):
    o = ""
    for c in s:
        if c.islower():
            o += convert(c, key, 'a')
        elif c.isupper():
            o += convert(c, key, 'A')
        else:
            o += c
    return o
def caesarDecode(s, key):
    return caesarEncode(s, -key)
if __name__ == '__main__':
    key = 3
    s = 'Hello world!'
    e = caesarEncode(s, key)
    d = caesarDecode(e, key)
    print(e)
    print(d)

运行结果:

Khoor zruog!
Hello world!