免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请高手帮我用shell写一个加密程序 [复制链接]

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
11 [报告]
发表于 2014-09-13 19:03 |只看该作者
本帖最后由 damcool 于 2014-09-13 19:11 编辑
  1. hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]=strtonum("0x1e");k[2]=strtonum("0x62");k[3]=strtonum("0xcc")}{for(i=1;i<=NF;i++) printf "%02X ",xor(k[i],$i);t=0;for(i=3;i>0;i--)t=t*256+k[i];s=sprintf("%06X",(t*strtonum("0x123456")+strtonum("0xABCD"))%strtonum("0x800000"));for(i=1;i<4;i++)k[i]=strtonum("0x"substr(s,7-i*2,2))}}'
复制代码
写了个主要的部分,看看是否合适?

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
12 [报告]
发表于 2014-09-13 19:28 |只看该作者
本帖最后由 bikkuri 于 2014-09-13 19:39 编辑

busybox上好像不支持这种写法:
  1. root@sbox:/tmp# awk -va=$((16#48656)) -vb=$((16#621A)) 'BEGIN{printf("%X\n",xor(a,b))}'
  2. -sh: arithmetic syntax error
  3. root@sbox:/tmp#
  4. root@sbox:/tmp# echo $((16#ABCD + 16#1234))
  5. -sh: arithmetic syntax error
  6. root@sbox:/tmp#
复制代码
bulletmarquis 发表于 2014-09-13 10:59
回复 3# bikkuri

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
13 [报告]
发表于 2014-09-13 19:32 |只看该作者
本帖最后由 bikkuri 于 2014-09-13 19:37 编辑

谢谢您的回复。
但是这个命令在我的busybox上运行好像没有任何输出啊?
而且好像strtonum函数在我的busybox上不支持呢?
  1. root@sbox:/tmp# awk 'BEGIN{print strtonum("0x123456")}'
  2. root@sbox:/tmp#
复制代码
damcool 发表于 2014-09-13 19:03
写了个主要的部分,看看是否合适?

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
14 [报告]
发表于 2014-09-13 19:46 |只看该作者
  1. hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0}{for(i=1;i<=NF;i++) printf "%02X ",xor(k[i],$i);t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)}}'
复制代码
busybox版的修改

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
15 [报告]
发表于 2014-09-13 19:51 |只看该作者
太感谢了!
这个可以正常在busybox上运行:
  1. root@sbox:/tmp# hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c
  2. ="0x800000"+0}{for(i=1;i<=NF;i++) printf "%02X ",xor(k[i],$i);t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%2
  3. 56;t=int(t/256)}}'
  4. 56 07 A0 8D D6 13 34 BE 06 63 7B 1C DD
  5. root@sbox:/tmp#
复制代码
可以把输出的16进制的文本变成输出16进制的代码吗?
比如假如原来输出56 07 A0 8D D6 13 34 BE 06 63 7B 1C DD,改成输出这13个字符的16进制代码。
谢谢!
回复 14# damcool


   

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
16 [报告]
发表于 2014-09-13 20:05 |只看该作者
  1. hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0}{for(i=1;i<=NF;i++) printf "\\x%02X",xor(k[i],$i);printf "\n";t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)}}'|xargs -I {} printf {}|hexdump -ve '1/1 "%02x "'
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
17 [报告]
发表于 2014-09-13 20:50 |只看该作者
  1. root@kbox:/tmp# hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0}{for(i=1;i<=NF;i++) printf "\\x%02X",xor(k[i],$i);printf "\n";t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)}}'|xargs -I {} printf {}|hexdump -ve '1/1 "%02x "' > test.crypt
  2. xargs: invalid option -- I
  3. root@kbox:/tmp# hexdump -ve '3/1 "%d " "\n"' test|awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0}{for(i=1;i<=NF;i++) printf "\\x%02X",xor(k[i],$i);printf "\n";t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)}}'|xargs {} printf {}|hexdump -ve '1/1 "%02x "' > test.crypt
  4. root@kbox:/tmp# ls -l test*
  5. -rw-r--r--    1 root     root            13 Sep 13 20:45 test
  6. -rw-r--r--    1 root     root             0 Sep 13 20:46 test.crypt
  7. root@kbox:/tmp#
复制代码
好像xargs有问题。

damcool 发表于 2014-09-13 20:05

论坛徽章:
0
18 [报告]
发表于 2014-09-13 22:33 |只看该作者
旁观一下,路过,这个目前无法判断,实际工作上是否用的上

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
19 [报告]
发表于 2014-09-14 13:59 |只看该作者
本帖最后由 bikkuri 于 2014-09-14 14:12 编辑

参照damcool大神之前的程序,试出来了
  1. root@sbox:/tmp# cat test|for buff in $(hexdump -ve '3/1 "%d " "\n"' |awk 'BEGIN{k[1]="0x1e"+0;k[2]="0x62"+0;k[3]="0xcc"+0;a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0}{for(i=1;i<=NF;i++) printf "\\x%02X",xor(k[i],$i);t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c;for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)}}');do printf "$buff"; done|hexdump -C
  2. 00000000  56 07 a0 8d d6 13 34 be  06 63 7b 1c dd           |V.....4..c{..|
  3. 0000000d
  4. root@sbox:/tmp#
复制代码
但是怎么把用
  1. org_key=$(ifconfig |awk '/eth0/{l=split($0,M,":");print M[l-2]M[l-1]M[l]}')
复制代码
得到的初始密钥赋值给k[1]、k[2]和k[3]呢?
这个值在不同的机器上运行得到的结果都是不一样的。
  1. root@sbox:/tmp# org_key=$(ifconfig |awk '/eth0/{l=split($0,M,":");print M[l-2]M[l-1]M[l]}')
  2. root@sbox:/tmp# echo $org_key
  3. CC707E
  4. root@sbox:/tmp#
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
20 [报告]
发表于 2014-09-14 20:08 |只看该作者
本帖最后由 bikkuri 于 2014-09-14 21:07 编辑

终于试出来了。
  1. root@kbox:/tmp# org_key=$(ifconfig |awk '/eth0/{l=split($0,M,":");print M[l-2]M[l-1]M[l]}')
  2. root@kbox:/tmp# encore(){
  3. > for buff in $(hexdump -ve '3/1 "%d " "\n"' |awk -vt="0x"$org_key 'BEGIN{a="0x123456"+0;b="0xABCD"+0;c="0x800000"+0;t=t+0}{for(i=1;i<4;i++){k[i]=t%256;t=int(t/256)};for(i=1;i<=NF;i++)printf "\\x%02X",xor(k[i],$i);t=0;for(i=3;i>0;i--)t=t*256+k[i];t=(t*a+b)%c}');do printf "$buff"; done
  4. > }
  5. root@kbox:/tmp# cat test|encore|hexdump -C
  6. 00000000  56 07 a0 8d d6 13 34 be  06 63 7b 1c dd           |V.....4..c{..|
  7. 0000000d
  8. root@kbox:/tmp#
复制代码
另外,我发现这个busybox版本的代码在标准Linux上跑是会出错的:
  1. [root@hp8 ~]# cat test1
  2. Hello World
  3. [root@hp8 ~]# echo $org_key
  4. B1FAEF
  5. [root@hp8 ~]# cat test1|encore|hexdump -C
  6. awk: (FILENAME=- FNR=1) fatal: division by zero attempted in `%'
  7. 00000000  48 65 6c                                          |Hel|
  8. 00000003
  9. [root@hp8 ~]#
复制代码
我们可以发现第一组3个字节就没有被正常处理,只是照原样输出了明文的三个字符。
然后当处理到第二组3个字节的时候报被零除的错误。
为什么在Linux上不能正常处理呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP