免费注册 查看新帖 |

Chinaunix

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

[算法] 求一个文件加密算法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-28 14:12 |只看该作者 |倒序浏览
用于对jpg图像文件进行加密,性能第一安全第二,当然也不能完全不考虑安全,像那种简单的逻辑移位是肯定不行的,3des这种复杂的算法效率又跟不上。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2010-06-28 14:16 |只看该作者
我只用过一个botan加密库:http://botan.randombit.net/

论坛徽章:
0
3 [报告]
发表于 2010-06-28 14:20 |只看该作者
回复 2# ecjtubaowp
好像是C++的
有C版本的吗?

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
4 [报告]
发表于 2010-06-28 16:58 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2010-06-28 17:00 |只看该作者
本帖最后由 yulihua49 于 2010-06-28 17:13 编辑
用于对jpg图像文件进行加密,性能第一安全第二,当然也不能完全不考虑安全,像那种简单的逻辑移位是肯定不行 ...
tajial 发表于 2010-06-28 14:12

ENIGMA密码:
http://blog.chinaunix.net/u3/92831/showart_2163335.html

    加入SDBC群,群空间有源码。QQ100807652

加密速度:
enigma1是3DES的27倍,frenz是13.5倍,enigma2是6.5倍。

使用方法:
#include <enigma.h>

ENIGMA2 egm;
//生成密码机
         enigma2_init(&ehm,"key122237@#$$%%");

//加密:

      enigma2_encode(&egm,buf,size);//buf里明码原位便密码
//解密:
      enigma2_decode(&egm,buf,size);//buf里密码原位变明码

安全性,在上文讨论。
适于流媒体加密。

由于是序列密码,对加密信息的长度没有限制,加密前后长度不变。

安全讨论,见80楼:
http://bbs.chinaunix.net/viewthr ... ;page=8#pid12368686

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
6 [报告]
发表于 2010-06-28 17:06 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
7 [报告]
发表于 2010-06-28 17:16 |只看该作者
本帖最后由 yulihua49 于 2010-06-28 17:19 编辑
兄弟直接上传个源码包吧
c/unix 发表于 2010-06-28 17:06



    加入SDBC群,在群空间-共享空间有,群论坛有编译方法:
你能看到吗?把part01-04下来,解压到linux'
http://qun.qq.com/air/#100807652/share
好像不行,入群吧,我等你。

只编译string和crypto两个目录即可。

crypt目录下有个t_eni.c,就是demo。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
8 [报告]
发表于 2010-06-28 17:20 |只看该作者
兄弟直接上传个源码包吧
c/unix 发表于 2010-06-28 17:06



    测试demo:
  1. /* enigma 加密测试 */
  2. #include <strproc.h>
  3. #include <enigma.h>
  4. #include <sys/time.h>

  5. //#define TEST_SPEED

  6. long interval(struct timeval *begtime,struct timeval *endtime)
  7. {
  8. long ret;
  9.         ret=endtime->tv_sec-begtime->tv_sec;
  10.         ret*=1000000;
  11.         ret += endtime->tv_usec - begtime->tv_usec;
  12.         return ret;
  13. }


  14. int main(int ac,char *av[])
  15. {
  16. char buf[131702];
  17. int len,i,len1;
  18. ENIGMA t;
  19. ENIGMA2 egm;
  20. struct timeval beg,end;

  21.         enigma1_init(t,"永 垂 不 朽,Enigma");
  22.         printf("t1:");
  23.         for(i=0;i<256;i++) {
  24.                 if(!(i&7)) putchar('\n');
  25.                 printf("%3d:%d\t",i,255&t[0][i]);
  26.         }
  27.         printf("\nt3:");
  28.         for(i=0;i<256;i++) {
  29.                 if(!(i&7)) putchar('\n');
  30.                 printf("%3d:%d\t",i,255&t[2][i]);
  31.         }
  32.         enigma2_init(&egm,"永 垂 不 朽 的 Enigma");
  33.         printf("\ncrc=%d\n",egm.crc);
  34. //      enigma2_init(&egm,"\x01\xff\x35\xf8\xef\x97\x22\x14\x80\x7f\t\b\r\n\377\177\225");
  35.         memset(buf,'\373',sizeof(buf));
  36.         buf[sizeof(buf)-1]=0;
  37. #ifndef TEST_SPEED
  38.         while(!ferror(stdin)) {
  39.                 fgets(buf,sizeof(buf),stdin);
  40.                 if(feof(stdin)) break;
  41.                 TRIM(buf);
  42. #endif
  43.                 len=strlen(buf);
  44.                 gettimeofday(&beg,0);
  45.                 enigma1(t,buf,len);
  46.                 gettimeofday(&end,0);
  47.                 len1=len>32?32:len;
  48.                 printf("enigma1 encode:");
  49.                 for(i=0;i<len1;i++) printf("%02X ",buf[i]&255);
  50.                 printf("\nenigma1 encode 64K:");
  51.                 for(i=0;i<len1;i++) printf("%02X ",buf[i+65536]&255);
  52.                 printf("\ntimeval=%ld\n",interval(&beg,&end));
  53.                 enigma1(t,buf,len);
  54.                 printf("enigma1 decode:\n%.100s\n",buf);
  55. //test frenz
  56.                 gettimeofday(&beg,0);
  57.                 frenz_encode(t,buf,len);
  58.                 gettimeofday(&end,0);
  59.                 printf("frenz encode:");
  60.                 for(i=0;i<len1;i++) printf("%02X ",buf[i]&255);
  61.                 printf("\nfrenz encode 64K:");
  62.                 for(i=0;i<len1;i++) printf("%02X ",buf[i+65536]&255);
  63.                 printf("\ntimeval=%ld\n",interval(&beg,&end));
  64.                 frenz_decode(t,buf,len);
  65.                 printf("frenz decode:\n%.100s\n",buf);
  66. //test enigma2
  67.                 gettimeofday(&beg,0);
  68.                 enigma2_encode(&egm,buf,len);
  69.                 gettimeofday(&end,0);
  70.                 printf("enigma2 encode:");
  71.                 for(i=0;i<len1;i++) printf("%02X ",buf[i]&255);
  72.                 printf("\nenigma2 encode 64K:");
  73.                 for(i=0;i<len1;i++) printf("%02X ",buf[i+65536]&255);
  74.                 printf("\ntimeval=%ld\n",interval(&beg,&end));
  75.                 enigma2_decode(&egm,buf,len);
  76.                 printf("enigma2 decode:\n%.100s\n",buf);
  77. #ifndef TEST_SPEED
  78.         }
  79. #endif
  80.         return 0;
  81. }
复制代码

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
9 [报告]
发表于 2010-06-28 17:21 |只看该作者
没想到ENIGMA还这么强大啊,没用过。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
10 [报告]
发表于 2010-06-28 17:23 |只看该作者
测试demo:
yulihua49 发表于 2010-06-28 17:20



    源码:
enigma.h:

  1. #ifndef ENIGMA_H
  2. #define ENIGMA_H

  3. #define ROTORSZ 256

  4. typedef char ENIGMA[3][ROTORSZ];
  5. typedef struct {
  6.         ENIGMA t;
  7.         ENIGMA r;
  8.         INT4 crc;
  9. } ENIGMA2;

  10. #ifdef __cplusplus
  11. extern "C" {
  12. #endif
  13. /* 改进的 ENIGMA 程序 */
  14. void enigma1_init(ENIGMA t,char *key);
  15. void enigma1(ENIGMA t,char *buf,int len);
  16. //疯狂旋转的转轮机,完全屏蔽了列表特征,不存在周期性
  17. void frenz_encode(ENIGMA t,char *string,int len);
  18. void frenz_decode(ENIGMA t,char *string,int len);

  19. /* 加密后扰码,用于配合多种加密手段 */
  20. void enigma_rev(ENIGMA t,char *buf,int len);
  21. /* 解扰后解密,用于解密 */
  22. void rev_enigma(ENIGMA t,char *buf,int len);

  23. /* 加强的ENIGMA程序,完全消除了密文与相似明文的对应关系 */
  24. void enigma2_init(ENIGMA2 *ep,char *key); //初始化
  25. void enigma2_encode(ENIGMA2 *ep,char *buf,int len);     //加密
  26. void enigma2_decode(ENIGMA2 *ep,char *buf,int len); //解密
  27. /*
  28. void enigma3_encode(ENIGMA2 *ep,char *buf,int len);     //加密
  29. void enigma3_decode(ENIGMA2 *ep,char *buf,int len); //解密
  30. */

  31. #ifdef __cplusplus
  32. }
  33. #endif

  34. #endif
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP