• 凯撒密码加密、解密、暴力破解(C语言实现)


     C语言设计,替换密码开发设计,2022年9月信息安全课程作业分享

    1. #include
    2. #include
    3. #include
    4. #include
    5. #define N 1000
    6. void encrypt();
    7. void decrypt();
    8. void decryptAll();
    9. int key() {
    10. char k[N];
    11. printf("输入密钥(1~26):");
    12. gets(k);
    13. while (1) {
    14. if (atoi(k) > 0 && atoi(k) <= 26)
    15. break;
    16. printf("格式错误,输入密钥(1~26):");
    17. gets(k);
    18. }
    19. return atoi(k);
    20. }
    21. void change(char code[],char code2[] ,int n) {
    22. char min[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    23. char max[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    24. int k,m;
    25. for (int i = 0; i < strlen(code); i++) {
    26. if('a'<=code[i] && code[i]<='z')
    27. {
    28. k=code[i]-'a';
    29. m=(26+k-n)%26;
    30. code2[i]=min[m];
    31. }
    32. else if('A'<=code[i] && code[i]<='Z')
    33. {
    34. k=code[i]-'A';
    35. m=(26+k-n)%26;
    36. code2[i]=max[m];
    37. }else{
    38. code2[i]=code[i];
    39. }
    40. }
    41. }
    42. void encrypt() {
    43. char min[26]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    44. char max[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
    45. char code[N] = {};//接受字符串
    46. int n,k,m;
    47. getchar();
    48. printf("请输入要加密的内容:");
    49. gets(code);
    50. n = key();//获得加密顺序的密钥
    51. for (int i = 0; i < strlen(code); i++) {
    52. if('a'<=code[i] && code[i]<='z')
    53. {
    54. k=code[i]-'a';
    55. m=(26+k+n)%26;
    56. code[i]=min[m];
    57. }
    58. else if('A'<=code[i] && code[i]<='Z')
    59. {
    60. k=code[i]-'A';
    61. m=(26+k+n)%26;
    62. code[i]=max[m];
    63. }
    64. else{
    65. code[i]=code[i];
    66. }
    67. }
    68. printf("加密之后的内容为:");
    69. puts(code);
    70. }
    71. void decrypt() {
    72. char code[N] = {}, code2[N] = {};
    73. int k;
    74. getchar();
    75. printf("输入密文:");
    76. gets(code);
    77. k = key();
    78. change(code,code2, k);
    79. printf("解密的内容为:");
    80. puts(code2);
    81. }
    82. void decryptAll() {
    83. char code[N] = {},code2[N]={};
    84. getchar();
    85. printf("输入密文:");
    86. gets (code);
    87. for (int k = 1; k <= 26; ++k) {
    88. change(code,code2, k);
    89. printf("当key = %d时,解密是:", k);
    90. puts(code2);
    91. }
    92. }
    93. int main() {
    94. int x;
    95. while (1) {
    96. printf("\n\n\t================= 欢迎使用凯撒密码加密系统 =============\n\n");
    97. printf("\t=====================请选择服务=====================\n");
    98. printf("\t* *\n");
    99. printf("\t* 1 加密 2 解密 *\n");
    100. printf("\t* *\n");
    101. printf("\t* 3 暴力解密 4 退出 *\n");
    102. printf("\t====================================================\n");
    103. printf("\t\t\t请作出选择(1-4):\n");
    104. scanf("%d", &x);
    105. if (x == 1)
    106. encrypt();
    107. else if (x == 2)
    108. decrypt();
    109. else if (x == 3)
    110. decryptAll();
    111. else if(x==4){
    112. printf("已退出,谢谢使用\n");
    113. printf("欢迎您下次使用,凯撒密码加密系统时刻在。");
    114. break;
    115. }else{
    116. printf("警告输入错误!!!\n");
    117. }
    118. }
    119. }

     

  • 相关阅读:
    基于ssm+vue的人性话服装定制系统 计算机毕业设计
    qt生成帮助文档过程
    GIT命令
    药物临床试验数据递交PMDA的规定
    Nginx部署前端网页,Nginx搭建静态资源服务器
    LeetCode13——罗马数字转整数
    VINS学习(二)IMU预积分原理与实现
    大数据(5n)ClickHouse异于平常SQL的语法
    SAP S4客户与供应商如何管理 事务代码 BP
    机器学习与深度学习的基本概念
  • 原文地址:https://blog.csdn.net/qq_47112287/article/details/127046506