免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: shitou254
打印 上一主题 下一主题

[算法] 异或被还原难度有多大? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-02-26 16:10 |只看该作者

啊长见识了,各位给推荐好点的可逆安全的加密算法!

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
12 [报告]
发表于 2009-02-26 16:41 |只看该作者
LZ加密算法的密码只是糊弄人的,不管多长的密码,其实就只有0~255之间的某个数.用这些数据与明文相异或,可能包括各种密码所生成的密文.如果不兴密码为"mm",其密文嘿嘿……

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
13 [报告]
发表于 2009-02-26 16:54 |只看该作者

  1. int xor_crypt_0(char *text, char key, int len)
  2. {
  3.         for (; len-- > 0; text++) {
  4.                 *text ^= key;
  5.         }
  6.         return 0;
  7. }

  8. int xor_crypt_1(char *text, char *key, int len)
  9. {
  10.         for (; *key != '\0'; key++) {
  11.                 xor_crypt_0(text, *key, len);
  12.         }
  13.         return 0;
  14. }

  15. int xor_crypt_2(char *text, char *key)
  16. {
  17.         char dat;

  18.         dat = 0;
  19.         for (; *text != '\0'; text++) {
  20.                 dat ^= *text;
  21.         }
  22.         *key = dat;
  23.         return 0;
  24. }

  25. #include <ctype.h>
  26. #include <stdio.h>

  27. int show_content(const char *buf, int len)
  28. {
  29.         int i, j, l;

  30.         i = 0;
  31.         while (i < len) {
  32.                 l = len - i;
  33.                 if (l > 16) {
  34.                         l = 16;
  35.                 }
  36.                 printf("%04X ", i);
  37.                 for (j = 0; j < l; j++) {
  38.                         printf("%02x ", (unsigned char)buf[j]);
  39.                 }
  40.                 for (; j < 16; j++) {
  41.                         printf("   ");
  42.                 }
  43.                 printf(" ");
  44.                 for (j = 0; j < l; j++) {
  45.                         if (buf[j] >= ' ' && buf[j] < 127) {
  46.                                 printf("%c", buf[j]);
  47.                         }else {
  48.                                 printf(".");
  49.                         }
  50.                 }
  51.                 printf("\n");
  52.                 i += l;
  53.                 buf += l;
  54.         }
  55.         return 0;
  56. }

  57. #define LEN(a) (sizeof(a)/sizeof((a)[0]))

  58. #include <string.h>

  59. int main(void)
  60. {
  61.         char text1[] = "This is my 串";
  62.         char text2[] = "This is my 串";
  63.         char text3[] = "             ";
  64.         char key1[] = "mnkey";
  65.         char key2;

  66.         xor_crypt_2(key1, &key2);
  67.         xor_crypt_1(text1, key1, LEN(text1) - 1);
  68.         xor_crypt_0(text2, key2, LEN(text2) - 1);
  69.         show_content(text1, LEN(text1) - 1);
  70.         show_content(text2, LEN(text2) - 1);
  71.         key2 = 0;
  72.         do {
  73.                 memcpy(text3, text1, LEN(text1));
  74.                 xor_crypt_0(text3, key2, LEN(text3) - 1);
  75.                 show_content(text3, LEN(text3) - 1);
  76.                 ++key2;
  77.         }while (key2 != 0);
  78.         return 0;
  79. }
复制代码

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
14 [报告]
发表于 2009-02-26 17:05 |只看该作者
如果在不知道明文任何内容的情况下,可以通过该方法获取全部可能的明文(共256种)。我想从中可以获得正确的明文。

论坛徽章:
0
15 [报告]
发表于 2009-02-26 17:13 |只看该作者
异或1次跟异或n次破解起来的时间复杂度是一样的。。

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
16 [报告]
发表于 2009-02-26 17:21 |只看该作者
获得你很多明文之后,可以根据概率破解。
(a^M)^(b^M)=a^b
此加密具有以上异或不变性

论坛徽章:
8
CU大牛徽章
日期:2013-04-17 10:59:39CU大牛徽章
日期:2013-04-17 11:01:45CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:58技术图书徽章
日期:2013-12-04 10:48:50酉鸡
日期:2014-01-03 10:32:30辰龙
日期:2014-03-06 15:04:07
17 [报告]
发表于 2009-02-26 17:30 |只看该作者
异或并非不可用于加密,但安全程度和具体算法有关。

比如,根据密钥初始化随机数发生器,然后用这一系列伪随机数与明文异或加密,破解难度就比较大了——但前提是不能被人看到你的代码,否则密钥空间可能就只有int那么大了(现在靠普通pc也足以在1秒内破解)。

可以说,现代加密,靠保密算法得来的东西,统统都是扯淡。


再比如,用密钥决定使用pi的第多少位开始的一系列数字与明文异或加密(需要一定的处理,否则将只能加密明文字符的后几位),这种加密算法强度可以达到最顶级的加密算法的程度(如果不考虑已知明文和密文能否反推到密码这一指标的话),也不怕别人看到源码;但计算pi需要消耗太多时间,因此毫无实用性可言。


所以,千万不要实现自己的加密算法;公开的各种标准算法是最方便也是最安全的选择。

评分

参与人数 1可用积分 +5 收起 理由
JohnBull + 5 我很赞同

查看全部评分

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
18 [报告]
发表于 2009-02-26 17:47 |只看该作者
破解的思路有很多,有一个思路是去猜测的密钥生成方法,然后缩小范围,开始穷举.
我现在也要去随机生成密钥,我准备采集AD芯片上的最后一位来产生随机数,这样应该是不太有明显的办法缩小范围穷举了

论坛徽章:
0
19 [报告]
发表于 2009-03-01 18:40 |只看该作者
呵呵,都喜欢搞难的

论坛徽章:
0
20 [报告]
发表于 2009-03-01 21:49 |只看该作者
这种加密不能抵抗已知明文差分攻击。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP