- 论坛徽章:
- 18
|
输入没有问题,只能是程序的问题,我仔细看了一下对最后不足3字节的处理,发现我的程序错了。
比如在最后i=25, NF=26的时候,还剩最后的第25和第26字节,输出应该只有一个=,
但在程序中NF-i=1,我错当成只剩最后一个字节,所以输出了两个=。
正确的处理应该是:- if (NF-i==0){
- result=result substr(BASE64,base1+1,1);
- result=result substr(BASE64,base2+1,1);
- result=result "==";
- }
- if (NF-i==1){
- result=result substr(BASE64,base1+1,1);
- result=result substr(BASE64,base2+1,1);
- result=result substr(BASE64,base3+1,1);
- result=result "=";
- }
- if (NF-i>=2){
- result=result substr(BASE64,base1+1,1);
- result=result substr(BASE64,base2+1,1);
- result=result substr(BASE64,base3+1,1);
- result=result substr(BASE64,base4+1,1);
- }
复制代码 这次输出的结果就和damcool大神一样了!- root@unknown:/tmp/test# cat a.gz|hexdump -ve '1/1 "%d "'|./base64encode.sh
- byte1=49 byte2=313 byte3=8 i=1 NF=26
- base1=12 base2=19 base3=36 base4=8
- Result=MTkI
- byte1=0 byte2=18 byte3=342 i=4 NF=26
- base1=0 base2=1 base3=9 base4=22
- Result=MTkIABJW
- byte1=404 byte2=130 byte3=2 i=7 NF=26
- base1=101 base2=8 base3=8 base4=2
- Result=MTkIABJWIIC
- byte1=3 byte2=579 byte3=114 i=10 NF=26
- base1=0 base2=52 base3=13 base4=50
- Result=MTkIABJWIICA0Ny
- byte1=517 byte2=513 byte3=513 i=13 NF=26
- base1=129 base2=16 base3=4 base4=1
- Result=MTkIABJWIICA0NyQEB
- byte1=561 byte2=2 byte3=0 i=16 NF=26
- base1=140 base2=16 base3=8 base4=0
- Result=MTkIABJWIICA0NyQEBQIA
- byte1=34 byte2=83 byte3=336 i=19 NF=26
- base1=8 base2=37 base3=13 base4=16
- Result=MTkIABJWIICA0NyQEBQIAIlNQ
- byte1=73 byte2=6 byte3=0 i=22 NF=26
- base1=18 base2=16 base3=24 base4=0
- Result=MTkIABJWIICA0NyQEBQIAIlNQSQYA
- byte1=0 byte2=0 byte3=0 i=25 NF=26
- base1=0 base2=0 base3=0 base4=0
- Result=MTkIABJWIICA0NyQEBQIAIlNQSQYAAAA=
- MTkIABJWIICA0NyQEBQIAIlNQSQYAAAA=root@unknown:/tmp/test#
复制代码bikkuri 发表于 2013-12-31 11:03
我检查了一下输入,发现两个程序的输入虽然有十进制和十六进制的区别,但是字节数是一样的: |
|