免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8527 | 回复: 8
打印 上一主题 下一主题

关于3DES [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-17 15:29 |只看该作者 |倒序浏览
我用openssl的DES_ecb3_encrypt函数加密后也网上下载3DES工具加密结果不同。
不知道是我的代码有问题还是什么原因。

密钥:111111111111111122222222222222223333333333333333
明文:6161616161616161
我加密的结果是:f90aba97690caf10
网上工具的结果:0AD17A539E88ABEC

代码主要内容:

   memcpy(block_key, 0x11, ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);
    memcpy(block_key, 0x22, ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);
    memcpy(block_key, 0x33, ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);
   
    memcpy(tmp, "aaaaaaaa", ;   

    DES_ecb3_encrypt((const_DES_cblock*)&tmp, (DES_cblock*)&in, &ks, &ks2, &ks3, DES_ENCRYPT);

奇怪的是,我能正确解密,工具也能正确解密。
是不是加密方式不同?

论坛徽章:
0
2 [报告]
发表于 2010-12-17 15:31 |只看该作者
我用openssl的DES_ecb3_encrypt函数加密后也网上下载3DES工具加密结果不同。
不知道是我的代码有问题还是什么原因。

密钥:111111111111111122222222222222223333333333333333
明文:6161616161616161
我加密的结果是:f90aba97690caf10
网上工具的结果:0AD17A539E88ABEC

代码主要内容:

   memcpy(block_key, 0x11, 8 ) ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);
    memcpy(block_key, 0x22, 8 ) ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);
    memcpy(block_key, 0x33, 8 ) ;
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);
   
    memcpy(tmp, "aaaaaaaa", 8 ) ;   

    DES_ecb3_encrypt((const_DES_cblock*)&tmp, (DES_cblock*)&in, &ks, &ks2, &ks3, DES_ENCRYPT);

奇怪的是,我能正确解密,工具也能正确解密。
是不是加密方式不同?

论坛徽章:
0
3 [报告]
发表于 2010-12-17 15:39 |只看该作者
自己顶一顶~哈哈~

论坛徽章:
0
4 [报告]
发表于 2010-12-17 15:39 |只看该作者
明显你的 是 3key 模式 而工具的应该是 2key 模式

论坛徽章:
0
5 [报告]
发表于 2010-12-17 15:43 |只看该作者
为什么我用这样
   memcpy(block_key, 0x11, 8 );
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks);
    memcpy(block_key, 0x22, 8 );
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks2);
    memcpy(block_key, 0x11, 8 );
    DES_set_key_unchecked((const_DES_cblock*)block_key, &ks3);

算出来的密文还是:f90aba97690caf10

论坛徽章:
0
6 [报告]
发表于 2010-12-17 15:50 |只看该作者
问题解决了。

改这样:
    block_key[0] = 0x11;
    block_key[1] = 0x11;
    block_key[2] = 0x11;
    block_key[3] = 0x11;
    block_key[4] = 0x11;
    block_key[5] = 0x11;
    block_key[6] = 0x11;
    block_key[7] = 0x11;
这个与这样:
memcpy(block_key, 0x11, 8 );

有区别么。

unsigned char block_key[8];

论坛徽章:
0
7 [报告]
发表于 2010-12-17 15:55 |只看该作者
我真2B,把memset搞成memcpy

论坛徽章:
0
8 [报告]
发表于 2010-12-17 16:20 |只看该作者
我都没注意你的代码搞法 吓我一跳

论坛徽章:
0
9 [报告]
发表于 2010-12-17 16:48 |只看该作者
其实不同的实现,可能结果也会不同的,除非大家都按照标志实现。
des是按块加密的,就存在块填充补齐,补齐的字符会对密文有影响,
还有,需要记录文件长度,对于加密时,对文件长度存储的位置或者方式不同,也可能造成密文或者解密的方法不同。
你后面用openssl的DES_ecb3_encrypt和网上下载的3DES加解密结果一致,说明他们都是采取标准方法,对补齐和长度等操作都是一样的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP