找回密码
 立即注册
查看: 1383|回复: 7

【算法】加密解密算法

[复制链接]

543

回帖

9457

基友

6601

积分

萨菲尔斯

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

发表于 2014-1-29 21:56:51 | 显示全部楼层 |阅读模式
  1. #include <string.h>
  2. /*

  3. 调用方法:        对String参数传递待加密/解密数据,对Key参数传递密钥数据。无返回值。函数返回后String参数对应数据即为加密/解密结果。

  4. 警告:                不得对String参数传递const char*变量,否则造成致命错误。

  5. */
  6. void StrEncrypt(char* String, const char* Key)
  7. {
  8.         int Length_A = strlen(String);
  9.         int Length_B = strlen(Key);
  10.         int Count_A;
  11.         int Count_B = 0;
  12.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  13.         {
  14.                 Count_B++;
  15.                 switch(*(Key - 1 + Count_B) % 4)
  16.                 {
  17.                 case 0:
  18.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key - 1 + Count_B);
  19.                         break;
  20.                 case 1:
  21.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key + Length_B - Count_B);
  22.                         break;
  23.                 case 2:
  24.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key - 1 + Count_B);
  25.                         break;
  26.                 case 3:
  27.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key + Length_B - Count_B);
  28.                         break;
  29.                 }
  30.                 if(Count_B == Length_B)
  31.                 {
  32.                         Count_B = 0;
  33.                 }
  34.         }
  35.         Count_B = 0;
  36.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  37.         {
  38.                 Count_B++;
  39.                 switch(*(Key + Length_B - Count_B) % 8)
  40.                 {
  41.                 case 0:
  42.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) ^ (~*(Key - 1 + Count_B));
  43.                         break;
  44.                 case 1:
  45.                         *(String - 1 + Count_A) = (~*(String - 1 + Count_A)) ^ *(Key - 1 + Count_B);
  46.                         break;
  47.                 case 2:
  48.                         *(String - 1 + Count_A) = ~( (~*(String - 1 + Count_A)) ^ (~*(Key - 1 + Count_B)) );
  49.                         break;
  50.                 case 3:
  51.                         *(String - 1 + Count_A) = ~( *(String - 1 + Count_A) ^ *(Key - 1 + Count_B) );
  52.                         break;
  53.                 case 4:
  54.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) ^ *(Key - 1 + Count_B);
  55.                         break;
  56.                 case 5:
  57.                         *(String - 1 + Count_A) = (~*(String - 1 + Count_A)) ^ (~*(Key - 1 + Count_B));
  58.                         break;
  59.                 case 6:
  60.                         *(String - 1 + Count_A) = ~( (~*(String - 1 + Count_A)) ^ *(Key - 1 + Count_B) );
  61.                         break;
  62.                 case 7:
  63.                         *(String - 1 + Count_A) = ~( *(String - 1 + Count_A) ^ (~*(Key - 1 + Count_B)) );
  64.                         break;
  65.                 }
  66.                 if(Count_B == Length_B)
  67.                 {
  68.                         Count_B = 0;
  69.                 }
  70.         }
  71.         Count_B = 0;
  72.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  73.         {
  74.                 Count_B++;
  75.                 switch(*(Key - 1 + Count_B) % 4)
  76.                 {
  77.                 case 0:
  78.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key + Length_B - Count_B);
  79.                         break;
  80.                 case 1:
  81.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key - 1 + Count_B);
  82.                         break;
  83.                 case 2:
  84.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key + Length_B - Count_B);
  85.                         break;
  86.                 case 3:
  87.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key - 1 + Count_B);
  88.                         break;
  89.                 }
  90.                 if(Count_B == Length_B)
  91.                 {
  92.                         Count_B = 0;
  93.                 }
  94.         }
  95.         return;
  96. }
  97. void StrDecrypt(char* String, const char* Key)
  98. {
  99.         int Length_A = strlen(String);
  100.         int Length_B = strlen(Key);
  101.         int Count_A;
  102.         int Count_B = 0;
  103.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  104.         {
  105.                 Count_B++;
  106.                 switch(*(Key - 1 + Count_B) % 4)
  107.                 {
  108.                 case 0:
  109.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key + Length_B - Count_B);
  110.                         break;
  111.                 case 1:
  112.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key - 1 + Count_B);
  113.                         break;
  114.                 case 2:
  115.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key + Length_B - Count_B);
  116.                         break;
  117.                 case 3:
  118.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key - 1 + Count_B);
  119.                         break;
  120.                 }
  121.                 if(Count_B == Length_B)
  122.                 {
  123.                         Count_B = 0;
  124.                 }
  125.         }
  126.         Count_B = 0;
  127.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  128.         {
  129.                 Count_B++;
  130.                 switch(*(Key + Length_B - Count_B) % 8)
  131.                 {
  132.                 case 0:
  133.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) ^ (~*(Key - 1 + Count_B));
  134.                         break;
  135.                 case 1:
  136.                         *(String - 1 + Count_A) = ~( *(String - 1 + Count_A) ^ *(Key - 1 + Count_B) );
  137.                         break;
  138.                 case 2:
  139.                         *(String - 1 + Count_A) = ~( (~*(String - 1 + Count_A)) ^ (~*(Key - 1 + Count_B)) );
  140.                         break;
  141.                 case 3:
  142.                         *(String - 1 + Count_A) = (~*(String - 1 + Count_A)) ^ *(Key - 1 + Count_B);
  143.                         break;
  144.                 case 4:
  145.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) ^ *(Key - 1 + Count_B);
  146.                         break;
  147.                 case 5:
  148.                         *(String - 1 + Count_A) = ~( *(String - 1 + Count_A) ^ (~*(Key - 1 + Count_B)) );
  149.                         break;
  150.                 case 6:
  151.                         *(String - 1 + Count_A) = ~( (~*(String - 1 + Count_A)) ^ *(Key - 1 + Count_B) );
  152.                         break;
  153.                 case 7:
  154.                         *(String - 1 + Count_A) = (~*(String - 1 + Count_A)) ^ (~*(Key - 1 + Count_B));
  155.                         break;
  156.                 }
  157.                 if(Count_B == Length_B)
  158.                 {
  159.                         Count_B = 0;
  160.                 }
  161.         }
  162.         Count_B = 0;
  163.         for(Count_A = 1; Count_A <= Length_A; Count_A++)
  164.         {
  165.                 Count_B++;
  166.                 switch(*(Key - 1 + Count_B) % 4)
  167.                 {
  168.                 case 0:
  169.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key - 1 + Count_B);
  170.                         break;
  171.                 case 1:
  172.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key + Length_B - Count_B);
  173.                         break;
  174.                 case 2:
  175.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) - *(Key - 1 + Count_B);
  176.                         break;
  177.                 case 3:
  178.                         *(String - 1 + Count_A) = *(String - 1 + Count_A) + *(Key + Length_B - Count_B);
  179.                         break;
  180.                 }
  181.                 if(Count_B == Length_B)
  182.                 {
  183.                         Count_B = 0;
  184.                 }
  185.         }
  186.         return;
  187. }
复制代码
CElib.rar (4.96 KB, 下载次数: 3)
原创的加密解密算法,亲测可用,强度高,不易破解。

回复

使用道具 举报

133

回帖

471

基友

811

积分

通神2段 Lv.5

Rank: 3Rank: 3

发表于 2014-1-29 22:15:25 | 显示全部楼层
好厉害的大神。。。
回复 支持 反对

使用道具 举报

1696

回帖

1万

基友

1万

积分

仙人3层 Lv.12

脱身白刃里     杀人红尘中

Rank: 6Rank: 6

发表于 2014-1-29 22:21:36 | 显示全部楼层
不明觉厉
回复 支持 反对

使用道具 举报

1万

回帖

6412

基友

3万

积分

死神左手

纯白无邪

Rank: 16Rank: 16Rank: 16Rank: 16

二货勋章周年纪念勋章

发表于 2014-1-29 22:31:30 来自手机 | 显示全部楼层
...加密我比较喜欢单向的。自己不想让别人知道的也不能让自己再看到。。。
回复 支持 反对

使用道具 举报

187

回帖

1301

基友

1948

积分

通神3段 Lv.6

Rank: 3Rank: 3

发表于 2014-3-10 11:24:00 | 显示全部楼层
有没有简单的算法啊
回复 支持 反对

使用道具 举报

132

回帖

176

基友

538

积分

通神1段 Lv.4

Rank: 2

发表于 2016-7-5 11:13:15 | 显示全部楼层
好厉害的大神。。。
回复 支持 反对

使用道具 举报

5

回帖

11

基友

26

积分

凡人1阶 Lv.1

Rank: 1

发表于 2021-6-19 22:26:46 | 显示全部楼层
11111111111111111111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-5-16 13:05 , Processed in 0.034974 second(s), 30 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部