lua hex2bit bit2hex

原创 2012年03月22日 09:58:43
最近玩了一下Lua,写了一个小程序,用于实践十六进制字符串和二进制数据之间的转换。主要是因为最近有这方面的需要(在搞一些 RSA加密的东西)。
从十六进制字符串转为二进制数:
 1 #! /usr/local/bin/lua
 2 
 3 
 4 --Note: Input hex string file's content must be 
 5 --a upper case hex string 
 6 
 7 --Check the arguments
 8 if #arg ~= 2 then
 9     print("Usage:hexstr2bytes.lua <Input Hex String File> <Output Bytes File>\n");
10     os.exit();
11 end
12 
13 --Open input hex string file
14 local hexstrfile = io.open(arg[1], "rb");
15 if nil == hexstrfile then
16     print("Can not open input file!\n");
17     os.exit();
18 end
19 
20 --Read from the hex string file
21 local hexstr = hexstrfile:read("*a");
22 if nil == hexstr then
23     print("Can not read hex string from input file!\n");
24 elseif 1 == string.len(hexstr)%2 then
25     print("Hex string size must be evel!\n");
26     os.exit();
27 else
28     print("Hex String:", hexstr, "\n");
29 end
30 
31 --Close hex string file
32 hexstrfile:close();
33 
34 --Open output binary file
35 local bytesfile = io.open(arg[2], "wb");
36 if nil == bytesfile then
37     print("Can not open output file to write!\n");
38     os.exit();
39 end
40 
41 --Convert hex string to bytes
42 for i = 1, string.len(hexstr) - 1, 2 do
43     local doublebytestr = string.sub(hexstr, i, i+1);
44     local n = tonumber(doublebytestr, 16);
45     if 0 == n then
46         bytesfile:write('\00');
47     else
48         bytesfile:write(string.format("%c", n));
49     end
50 end
51 
52 --Close output binary file
53 bytesfile:close();
54 
55 
56 
从二进制数转十六进制字符串:
 1 #! /usr/local/bin/lua
 2 
 3 
 4 --Check the arguments
 5 if #arg ~= 2 then
 6     print("Usage:bytes2hexstr.lua <Input Bytes File> <Output Hex String File>\n");
 7     os.exit();
 8 end
 9 
10 --Open input bytes file
11 local bytesfile = io.open(arg[1], "rb");
12 if nil == bytesfile then
13     print("Can not open input file!\n");
14     os.exit();
15 end
16 
17 --Read from the bytes file
18 local bytes = bytesfile:read("*a");
19 if nil == bytes then
20     print("Can not read bytes from input file!\n");
21     os.exit();
22 end
23 
24 --Close bytes file
25 bytesfile:close();
26 
27 --Open output hex string file
28 local hexstrfile = io.open(arg[2], "wb");
29 if nil == hexstrfile then
30     print("Can not open output file to write!\n");
31     os.exit();
32 end
33 
34 --Convert bytes to hex string
35 for i = 1, string.len(bytes) do
36     local charcode = tonumber(string.byte(bytes, i, i));
37     local hexstr = string.format("%02X", charcode);
38     hexstrfile:write(hexstr);
39 end
40 
41 --Close output hex string file
42 hexstrfile:close();
使用Crypto++生成的私钥文件(使用HexEncoder编码的DER格式文件)ch:
30820275020100300D06092A864886F70D01010105000482025F3082025B020100028
181009EEA4CF16CCD0DEF5FAA7B27D872AA0B5CCC286464E5338AE958E076BE764CA9
7C52E89D52329A4BB10DD586031CDD71D0C0581A8A3A41378AED44AA4F25B09C8BF2C
573C882BD82A8EE670C49229C609FB740CC7230FD25411851B3A37AEF91AA6EF3D2EF
2CEC5E03A04257D2C3FDDAAD092696A96B7D0358B1AE339625F9B50201110281802EB
D61ECA7879AAFD0D7C9DE8AF48C5DB1E1B186F07FA5BF71CED89B6531DA4FF763ADD3
EAFFD307341320AEF1DB503088B10ADAA120314C9245C8E6CBFC06C42AE3AFD1612DB
A9FC6619E5E08E70BA0CB211D73FD94EA35D3D7BDFCA8AFDC98F5E1277FB1C12ACF09
75D3AA74227B6D23A692DF5B9E6720C5B81578CBBA3D2D024100D1FD16E7CB7898978
5B87DF9E80D071AF95AC47B70FD053A8D03784FF46D6484EEB09B200C3800FBE46C02
A20127BED5CC880F0BAD8FDC9408FAE7A3C634C2C3024100C1BC58C4190843FF1A506
8390F9DA0EFC0857E936FD342007D6A86A23E51369E448D9F33ECFDC03BCBD6D67246
C09B5E9A7DF0F9F78DDB664911B0C1E8119A2702403DC2E89E8723782C90BDCAB2E9E
5B6CBB2C057E8122C4CD4FC4C508FFC98A51809F7B5278B1F87D19D892DF369C0654D
F0DCB9218D668C2B8A2BAD8A85970C1B024100B656EA21F97130F018C425DB59FDC4A
569E70DB7F0C6D4B52ABE9CD4EF5B7EB313581D5E0C3A1E56657EE7F31569FBA4552B
3D277F94924226A73CF2BC4CCD51024100BB5DA6433C896D07C88821107EF658DD201
B7049191213A2001D3EC0A68279CCC6A36EC5DB384F2797CA47F94505A069B247758D
8E6D1A8D30B068BCD26FC7F6
使用hexstr2bytes.lua:
hexstr2bytes.lua ch chout生成chout:
00000000h: 30 82 02 75 02 01 00 30 0D 06 09 2A 86 48 86 F7 ; 0?u0*咹嗺
00000010h: 0D 01 01 01 05 00 04 82 02 5F 30 82 02 5B 02 01 ; .?_0?[..
00000020h: 00 02 81 81 00 9E EA 4C F1 6C CD 0D EF 5F AA 7B ; ..亖.炾L駆?颻獅
00000030h: 27 D8 72 AA 0B 5C CC 28 64 64 E5 33 8A E9 58 E0 ; '豶?\?dd?婇X?
00000040h: 76 BE 76 4C A9 7C 52 E8 9D 52 32 9A 4B B1 0D D5 ; v緑L﹟R铦R2欿??
00000050h: 86 03 1C DD 71 D0 C0 58 1A 8A 3A 41 37 8A ED 44 ; ?.輖欣X.?A7婍D
00000060h: AA 4F 25 B0 9C 8B F2 C5 73 C8 82 BD 82 A8 EE 67 ; 狾%皽嬺舠葌絺g
00000070h: 0C 49 22 9C 60 9F B7 40 CC 72 30 FD 25 41 18 51 ; .I"渀煼@蘲0?A.Q
00000080h: B3 A3 7A EF 91 AA 6E F3 D2 EF 2C EC 5E 03 A0 42 ; 常z飸猲笠?靆.燘
00000090h: 57 D2 C3 FD DA AD 09 26 96 A9 6B 7D 03 58 B1 AE ; W颐?&柀k}.X碑
000000a0h: 33 96 25 F9 B5 02 01 11 02 81 80 2E BD 61 EC A7 ; 3?.亐.絘歆
000000b0h: 87 9A AF D0 D7 C9 DE 8A F4 8C 5D B1 E1 B1 86 F0 ; 嚉咨迠魧]贬眴?
000000c0h: 7F A5 BF 71 CE D8 9B 65 31 DA 4F F7 63 AD D3 EA ; タq呜沞1贠鱟?
000000d0h: FF D3 07 34 13 20 AE F1 DB 50 30 88 B1 0A DA A1 ; ?4. 跴0埍.凇
000000e0h: 20 31 4C 92 45 C8 E6 CB FC 06 C4 2A E3 AF D1 61 ;  1L扙孺它.?惘補
000000f0h: 2D BA 9F C6 61 9E 5E 08 E7 0B A0 CB 21 1D 73 FD ; -簾芶瀆.?犓!.s?
00000100h: 94 EA 35 D3 D7 BD FC A8 AF DC 98 F5 E1 27 7F B1 ; 旉5幼近ǒ軜踽'?
00000110h: C1 2A CF 09 75 D3 AA 74 22 7B 6D 23 A6 92 DF 5B ; ??u营t"{m#遊
00000120h: 9E 67 20 C5 B8 15 78 CB BA 3D 2D 02 41 00 D1 FD ; 瀏 鸥.x撕=-.A.妖
00000130h: 16 E7 CB 78 98 97 85 B8 7D F9 E8 0D 07 1A F9 5A ; .缢x槜吀}鵝
00000140h: C4 7B 70 FD 05 3A 8D 03 78 4F F4 6D 64 84 EE B0 ; 膡p?:?xO鬽d勵?
00000150h: 9B 20 0C 38 00 FB E4 6C 02 A2 01 27 BE D5 CC 88 ; ?.8.l.?'菊虉
00000160h: 0F 0B AD 8F DC 94 08 FA E7 A3 C6 34 C2 C3 02 41 ; ..瓘軘.F4旅.A
00000170h: 00 C1 BC 58 C4 19 08 43 FF 1A 50 68 39 0F 9D A0 ; .良X?.C.Ph9.潬
00000180h: EF C0 85 7E 93 6F D3 42 00 7D 6A 86 A2 3E 51 36 ; 锢厏搊覤.}j啟>Q6
00000190h: 9E 44 8D 9F 33 EC FD C0 3B CB D6 D6 72 46 C0 9B ; 濪崯3忑?酥謗F罌
000001a0h: 5E 9A 7D F0 F9 F7 8D DB 66 49 11 B0 C1 E8 11 9A ; ^殅瘗鲘踗I.傲??
000001b0h: 27 02 40 3D C2 E8 9E 87 23 78 2C 90 BD CA B2 E9 ; '.@=妈瀲#x,惤什?
000001c0h: E5 B6 CB B2 C0 57 E8 12 2C 4C D4 FC 4C 50 8F FC ; 宥瞬繵?,L渣LP忺
000001d0h: 98 A5 18 09 F7 B5 27 8B 1F 87 D1 9D 89 2D F3 69 ; 槬..鞯'?囇潐-骾
000001e0h: C0 65 4D F0 DC B9 21 8D 66 8C 2B 8A 2B AD 8A 85 ; 纄M疖?峟??瓓?
000001f0h: 97 0C 1B 02 41 00 B6 56 EA 21 F9 71 30 F0 18 C4 ; ?..A.禫?鵴0??
00000200h: 25 DB 59 FD C4 A5 69 E7 0D B7 F0 C6 D4 B5 2A BE ; %踄?佛圃??
00000210h: 9C D4 EF 5B 7E B3 13 58 1D 5E 0C 3A 1E 56 65 7E ; 溤颷~?X.^.:.Ve~
00000220h: E7 F3 15 69 FB A4 55 2B 3D 27 7F 94 92 42 26 A7 ; 珞.iU+='敀B&?
00000230h: 3C F2 BC 4C CD 51 02 41 00 BB 5D A6 43 3C 89 6D ; <蚣L蚎.A.籡<塵
00000240h: 07 C8 88 21 10 7E F6 58 DD 20 1B 70 49 19 12 13 ; .葓!.~鯴?.pI
00000250h: A2 00 1D 3E C0 A6 82 79 CC C6 A3 6E C5 DB 38 4F ; ?.>捆倅唐袍8O
00000260h: 27 97 CA 47 F9 45 05 A0 69 B2 47 75 8D 8E 6D 1A ; '検G鵈.爄睪u崕m.
00000270h: 8D 30 B0 68 BC D2 6F C7 F6                      ; ?癶家o泅
使用bytes2hexstr.lua:
bytes2hexstr.lua chout chtmp生成chtmp:

30820275020100300D06092A864886F70D01010105000482025F3082025B020100028
181009EEA4CF16CCD0DEF5FAA7B27D872AA0B5CCC286464E5338AE958E076BE764CA9
7C52E89D52329A4BB10DD586031CDD71D0C0581A8A3A41378AED44AA4F25B09C8BF2C
573C882BD82A8EE670C49229C609FB740CC7230FD25411851B3A37AEF91AA6EF3D2EF
2CEC5E03A04257D2C3FDDAAD092696A96B7D0358B1AE339625F9B50201110281802EB
D61ECA7879AAFD0D7C9DE8AF48C5DB1E1B186F07FA5BF71CED89B6531DA4FF763ADD3
EAFFD307341320AEF1DB503088B10ADAA120314C9245C8E6CBFC06C42AE3AFD1612DB
A9FC6619E5E08E70BA0CB211D73FD94EA35D3D7BDFCA8AFDC98F5E1277FB1C12ACF09
75D3AA74227B6D23A692DF5B9E6720C5B81578CBBA3D2D024100D1FD16E7CB7898978
5B87DF9E80D071AF95AC47B70FD053A8D03784FF46D6484EEB09B200C3800FBE46C02
A20127BED5CC880F0BAD8FDC9408FAE7A3C634C2C3024100C1BC58C4190843FF1A506
8390F9DA0EFC0857E936FD342007D6A86A23E51369E448D9F33ECFDC03BCBD6D67246
C09B5E9A7DF0F9F78DDB664911B0C1E8119A2702403DC2E89E8723782C90BDCAB2E9E
5B6CBB2C057E8122C4CD4FC4C508FFC98A51809F7B5278B1F87D19D892DF369C0654D
F0DCB9218D668C2B8A2BAD8A85970C1B024100B656EA21F97130F018C425DB59FDC4A
569E70DB7F0C6D4B52ABE9CD4EF5B7EB313581D5E0C3A1E56657EE7F31569FBA4552B
3D277F94924226A73CF2BC4CCD51024100BB5DA6433C896D07C88821107EF658DD201
B7049191213A2001D3EC0A68279CCC6A36EC5DB384F2797CA47F94505A069B247758D
8E6D1A8D30B068BCD26FC7F6

相关文章推荐

Lua实现二进制串与Hex显示串的相互转换

原地址: http://my.oschina.net/SunLightJuly/blog/220844 之前因为在调试程序的时候,要查看Lua的二进制字串里的内容,所以找了个二...
  • Eddids
  • Eddids
  • 2015年04月28日 10:11
  • 2326

在lua中常用到的几个小函数

local cjson         = require("cjson") local iconv         = require("iconv") local zhttp         ...

Lua 中 number 转换各种进制,以及string串转number

本文实现了Lua 中 number 转换各种进制,以及各种进制 string 串转 number。实现思路: 1. 实现一个 table:_convertTable, 存下数字和字符串之间的对应关系...

protobuf-lua-gen 中使用 bytes

protobuf - lua -gen 中的数据类型参考下图 bytes 我们就用string 来传值就可以。 比如下面的 Person.proto message Pers...

LUA之string的使用

--string.len(s)          --返回字符串s的长度   --string.rep(s, n) --返回重复n次字符串s的串,你使用string.rep("a", 2^2...

在lua5.3 使用 zrong 和ByteArray

1. lua 5.3 string.pack 和 string.unpack http://cloudwu.github.io/lua53doc/manual.html#6.4.2 用...

Lua二进制和十六进制的相互转换以及文件保存传递

有时候我们有需要保存某个文件或者传输某个文件的需求,当然通过二进制流传输也是同样的道理,但是不利于传递保存。例如,我有张裸照不想被人直接看见,所以我不能直接保存图片,保存二进制码吧太长,所以呢,我可以...

hex2bin for 64bit

  • 2016年05月11日 10:52
  • 38KB
  • 下载

HEX2BIN文件简析:

HEX文件以行为单位。每行以字符 ‘:’ (0x3A)开头,以回车--换行符0x0D, 0x0A为结束。 每行开始和结束之间的所有内容,都是以字符形式表现的。 8 位数据:数据如果是 0xFE ,那么...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lua hex2bit bit2hex
举报原因:
原因补充:

(最多只允许输入30个字)