帮我写一下仿射密码的c语言程序
时间: 2023-06-02 12:07:51 浏览: 137
好的,以下是仿射密码的C语言程序:
```c
#include <stdio.h>
int main() {
char original_text[1000], encrypted_text[1000], decrypted_text[1000];
int i, a, b;
printf("请输入明文:");
gets(original_text);
printf("请输入a、b值(需满足a与26互质):");
scanf("%d%d", &a, &b);
//加密
for (i=0; original_text[i]!='\0'; i++) {
if (original_text[i]>='A' && original_text[i]<='Z') {
encrypted_text[i] = (a * (original_text[i] - 'A') + b) % 26 + 'A';
} else if (original_text[i]>='a' && original_text[i]<='z') {
encrypted_text[i] = (a * (original_text[i] - 'a') + b) % 26 + 'a';
} else {
encrypted_text[i] = original_text[i];
}
}
encrypted_text[i] = '\0';
printf("加密后的密文是:%s\n", encrypted_text);
//解密
for (i=0; encrypted_text[i]!='\0'; i++) {
if (encrypted_text[i]>='A' && encrypted_text[i]<='Z') {
decrypted_text[i] = ((encrypted_text[i] - 'A' - b) * (a < 0 ? a+26 : a) % 26) + 'A';
} else if (encrypted_text[i]>='a' && encrypted_text[i]<='z') {
decrypted_text[i] = ((encrypted_text[i] - 'a' - b) * (a < 0 ? a+26 : a) % 26) + 'a';
} else {
decrypted_text[i] = encrypted_text[i];
}
}
decrypted_text[i] = '\0';
printf("解密后的明文是:%s\n", decrypted_text);
return 0;
}
```
请注意,本程序中的a和b需满足a和26互质,否则可能无法正确解密。此外,本程序存在缺陷,可能会受到攻击,建议不要用于严格的加密场景。
阅读全文