- 论坛徽章:
- 18
|
本帖最后由 bikkuri 于 2014-01-02 18:03 编辑
今天抽了点时间来仔细测试一下这个程序,发现解码的部分还是有问题。
我先把原来的代码拆解为编码和解码两个部分:- root@box:~# cat encode.sh
- #!/bin/sh
- base64encode()
- {
- awk -v B64="$CODE" '{for(i=1;i<=NF;i+=3){t=0;t=$i*256*256+$(i+1)*256+$(i+2);for(j=3;j>=0;j--){c=(i+2-j<=NF)?substr(B64,int(t/2^(6*j))+1,1):"=";printf("%c",c);t%=2^(6*j);if (++k==76) printf"\n";k%=76}}}'
- }
- CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- base64encode
- root@box:~# cat decode.sh
- #!/bin/sh
- base64decode()
- {
- awk -v B64="$CODE" '{while(length()){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--) t=t+2^(6*i)*((a[4-i]=="=")?0:index(B64,a[4-i])-1);for (i=2;i>=0;i--) if (a[4-i]!="="){printf("\\\\\\x%X",t/2^(8*i));t=t%2^(8*i)}}printf"\n"}'|xargs printf
- # for raw_data in $(awk -v B64="$CODE" '{while(length()){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--) t=t+2^(6*i)*((a[4-i]=="=")?0:index(B64,a[4-i])-1);for (i=2;i>=0;i--) if (a[4-i]!="="){printf("\\\\x%X",t/2^(8*i));t=t%2^(8*i)}}printf"\n"}'); do printf "$raw_data";done
- }
- CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- base64decode
- root@box:~#
复制代码 然后分别对其做测试,发现在处理比较小的文件时,工作是正常的。- root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > hello.64; cat hello.64|./decode.sh |gzip -cd
- Hello
- root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > hello.64; cat hello.64|./decode.sh |hexdump -ve '1/1 "%d "'
- 31 139 8 0 19 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
- root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'
- 31 139 8 0 29 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
- root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh |./decode.sh |hexdump -ve '1/1 "%d "'
- 31 139 8 0 134 237 196 82 2 3 243 72 205 201 201 231 2 0 22 53 150 49 6 0 0 0 root@box:~#
复制代码 但是一旦处理一个稍微大一点(其实也不大,大约1700字节的文本文件,压缩后约300多字节)的文件时,解码程序不能输出所有解码内容:- root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |gzip -cd
- gzip: error inflating
- root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'
- 31 139 8 0 196 238 196 82 2 3 181 85 221 110 218 48 20 190 198 79 225 186 81 85 38 209 192 164 77 171 170 86 154 246 6 91 239 186 42 50 198 9 86 19 155 197 134 10 81 222 125 231 216 113 126 96 208 222 236 42 62 255 223 249 114 142 125 121 145 206 149 78 237 146 166 210 137 180 22 55 194 84 149 209 228 146 94 255 24 211 207 211 233 55 106 86 82 191 214 238 198 212 5 33 191 30 191 255 124 188 191 253 74 72 105 248 34 43 229 226 122 76 119 100 84 26 193 75 170 121 37 227 217 110 109 110 163 224 106 85 20 178 142 226 66 110 226 177 50 11 217 169 115 190 46 93 39 150 124 11 88 6 98 158 71 89 105 39 235 13 47 9 25 9 163 115 85 100 133 116 161 44 77 102 177 126 207 132 232 208 226 191 44 241 14 108 224 209 192 68 167 120 100 218 104 57 244 2 244 232 225 155 232 169 177 19 212 251 47 43 149 126 25 132 101 115 99 218 22 67 124 56 50 173 202 195 2 190 241 224 212 112 112 100 206 243 206 142 164 244 28 34 51 232 208 158 217 151 233 176 202 202 212 46 179 142 59 143 186 147 128 207 39 58 145 52 5 130 82 81 114 107 83 248 205 54 77 118 158 177 125 58 7 106 150 78 75 107 233 51 189 186 194 223 63 146 98 105 40 179 210 57 165 11 186 94 81 8 161 201 14 169 222 67 89 200 200 146 166 97 70 47 238 41 244 220 5 131 53 26 161 240 31 58 243 38 52 132 188 51 250 240 1 48 39 18 189 189 117 137 166 31 77 180 143 45 37 113 14 30 78 243 209 14 247 72 112 139 147 213 40 24 144 15 74 166 165 131 89 97 227 0 112 162 61 21 27 214 235 191 169 133 131 117 166 14 152 149 144 89 88 178 54 200 143 219 153 168 176 96 161 165 209 221 29 65 68 78 85 0 111 8 200 207 89 3 234 247 0 84 24 198 179 192 192 37 195 41 61 200 151 231 39 19 194 248 190 159 17 231 186 5 189 182 243 255 72 99 187 39 103 34 185 112 106 163 220 54 107 175 158 3 94 187 37 26 192 236 169 143 233 232 173 225 153 210 189 245 108 203 217 87 229 196 242 105 58 185 125 254 228 203 133 123 209 187 86 220 190 160 207 209 194 163 161 221 119 239 117 128 19 117 167 96 250 224 247 80 198 164 0 18 130 45 23 4 56 218 19 2 232 107 23 94 139 127 222 47 221 143 108 48 227 11 131 215 184 147 85 167 204 77 45 185 88 210 248 252 224 69 19 10 252 5 101 153 181 43 204 6 0 0 root@box:~#
- root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |hexdump -ve '1/1 "%d "'
- 31 139 8 0 42 239 196 82 2 3 181 85 221 110 218 48 20 190 198 79 225 186 81 85 38 209 192 164 77 171 170 86 154 246 6 91 239 186 42 50 198 9 86 19 155 197 134 10 81 222 125 231 216 113 126 96 208 root@box:~#
复制代码 解码程序如果改用下面一行不用xargs的命令,则输出比原文件长几倍,而且内容也不正确。- root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |hexdump -ve '1/1 "%d "'
- 92 120 49 70 92 120 56 66 92 120 56 92 120 48 92 120 56 49 92 120 51 54 92 120 67 53 92 120 53 50 92 120 50 92 120 51 92 120 66 53 92 120 53 53 92 120 68 68 92 120 54 69 92 120 68 65 92 120 51 48 92 120 49 52 92 120 66 69 92 120 67 54 92 120 52 70 92 120 69 49 92 120 66 65 92 120 53 49 92 120 53 53 92 120 50 54 92 120 68 49 92 120 67 48 92 120 65 52 92 120 52 68 92 120 65 66 92 120 65 65 92 120 53 54 92 120 57 65 92 120 70 54 92 120 54 92 120 53 66 92 120 69 70 92 120 66 65 92 120 50 65 92 120 51 50 92 120 67 54 92 120 57 92 120 53 54 92 120 49 51 92 120 57 66 92 120 67 53 92 120 56 54 92 120 65 92 120 53 49 92 120 68 69 92 120 55 68 92 120 69 55 92 120 68 56 92 120 55 49 92 120 55 69 92 120 54 48 92 120 68 48 92 120 68 69 92 120 69 67 92 120 50 65 92 120 51 69 92 120 70 70 92 120 68 70 92 120 70 57 92 120 55 50 92 120 56 69 92 120 55 68 92 120 55 57 92 120 57 49 92 120 67 69 92 120 57 53 92 120 52 69 92 120 69 68 92 120 57 50 92 120 65 54 92 120 68 50 92 120 56 57 92 120 66 52 92 120 49 54 92 120 51 55 92 120 67 50 92 120 53 52 92 120 57 53 92 120 68 49 92 120 69 52 92 120 57 50 92 120 53 69 92 120 70 70 92 120 49 56 92 120 68 51 92 120 67 70 92 120 68 51 92 120 69 57 92 120 51 55 92 120 54 65 92 120 53 54 92 120 53 50 92 120 66 70 92 120 68 54 92 120 69 69 92 120 67 54 92 120 68 52 92 120 53 92 120 50 49 92 120 66 70 92 120 49 69 92 120 66 70 92 120 70 70 92 120 55 67 92 120 66 67 92 120 66 70 92 120 70 68 92 120 52 65 92 120 52 56 92 120 54 57 92 120 70 56 92 120 50 50 92 120 50 66 92 120 69 53 92 120 69 50 92 120 55 65 92 120 52 67 92 120 55 55 92 120 54 52 92 120 53 52 92 120 49 65 92 120 67 49 92 120 52 66 92 120 65 65 92 120 55 57 92 120 50 53 92 120 69 51 92 120 68 57 92 120 54 69 92 120 54 68 92 120 54 69 92 120 65 51 92 120 69 48 92 120 54 65 92 120 53 53 92 120 49 52 92 120 66 50 92 120 56 69 92 120 69 50 92 120 52 50 92 120 54 69 92 120 69 50 92 120 66 49 92 120 51 50 92 120 66 92 120 68 57 92 120 65 57 92 120 55 51 92 120 66 69 92 120 50 69 92 120 53 68 92 120 50 55 92 120 57 54 92 120 55 67 92 120 66 92 120 53 56 92 120 54 92 120 54 50 92 120 57 69 92 120 52 55 92 120 53 57 92 120 54 57 92 120 50 55 92 120 69 66 92 120 68 92 120 50 70 92 120 57 92 120 49 57 92 120 57 92 120 65 51 92 120 55 51 92 120 53 53 92 120 54 52 92 120 56 53 92 120 55 52 92 120 65 49 92 120 50 67 92 120 52 68 92 120 54 54 92 120 66 49 92 120 55 69 92 120 67 70 92 120 56 52 92 120 69 56 92 120 68 48 92 120 69 50 92 120 66 70 92 120 50 67 92 120 70 49 92 120 69 92 120 54 67 92 120 69 48 92 120 68 49 92 120 67 48 92 120 52 52 92 120 65 55 92 120 55 56 92 120 54 52 92 120 68 65 92 120 54 56 92 120 51 57 92 120 70 52 92 120 50 92 120 70 52 92 120 69 56 92 120 69 49 92 120 57 66 92 120 69 56 92 120 65 57 92 120 66 49 92 120 49 51 92 120 68 52 92 120 70 66 92 120 50 70 92 120 50 66 92 120 57 53 92 120 55 69 92 120 49 57 92 120 56 52 92 120 54 53 92 120 55 51 92 120 54 51 92 120 68 65 92 120 49 54 92 120 52 51 92 120 55 67 92 120 51 56 92 120 51 50 92 120 65 68 92 120 67 65 92 120 67 51 92 120 50 92 120 66 69 92 120 70 49 92 120 69 48 92 120 68 52 92 120 55 48 92 120 55 48 92 120 54 52 92 120 67 69 92 120 70 51 92 120 67 69 92 120 56 69 92 120 65 52 92 120 70 52 92 120 49 67 92 120 50 50 92 120 51 51 92 120 69 56 92 120 68 48 92 120 57 69 92 120 68 57 92 120 57 55 92 120 69 57 92 120 66 48 92 120 67 65 92 120 67 65 92 120 68 52 92 120 50 69 92 120 66 51 92 120 56 69 92 120 51 66 92 120 56 70 92 120 66 65 92 120 57 51 92 120 56 48 92 120 67 70 92 120 50 55 92 120 51 65 92 120 57 49 92 120 51 52 92 120 53 92 120 56 50 92 120 53 50 92 120 53 49 92 120 55 50 92 120 54 66 92 120 53 51 92 120 70 56 92 120 67 68 92 120 51 54 92 120 52 68 92 120 55 54 92 120 57 69 92 120 66 49 92 120 55 68 92 120 51 65 92 120 55 92 120 54 65 92 120 57 54 92 120 52 69 92 120 52 66 92 120 54 66 92 120 69 57 92 120 51 51 92 120 66 68 92 120 66 65 92 120 67 50 92 120 68 70 92 120 51 70 92 120 57 50 92 120 54 50 92 120 54 57 92 120 50 56 92 120 66 51 92 120 68 50 92 120 51 57 92 120 65 53 92 120 66 92 120 66 65 92 120 53 69 92 120 53 49 92 120 56 92 120 65 49 92 120 67 57 92 120 69 92 120 65 57 92 120 68 69 92 120 52 51 92 120 53 57 92 120 67 56 92 120 67 56 92 120 57 50 92 120 65 54 92 120 54 49 92 120 52 54 92 120 50 70 92 120 69 69 92 120 50 57 92 120 70 52 92 120 68 67 92 120 53 92 120 56 51 92 120 51 53 92 120 49 65 92 120 65 49 92 120 70 48 92 120 49 70 92 120 51 65 92 120 70 51 92 120 50 54 92 120 51 52 92 120 56 52 92 120 66 67 92 120 51 51 92 120 70 65 92 120 70 48 92 120 49 92 120 51 48 92 120 50 55 92 120 49 50 92 120 66 68 92 120 66 68 92 120 55 53 92 120 56 57 92 120 65 54 92 120 49 70 92 120 52 68 92 120 66 52 92 120 56 70 92 120 50 68 92 120 50 53 92 120 55 49 92 120 69 92 120 49 69 92 120 52 69 92 120 70 51 92 120 68 49 92 120 69 92 120 70 55 92 120 52 56 92 120 55 48 92 120 56 66 92 120 57 51 92 120 68 53 92 120 50 56 92 120 49 56 92 120 57 48 92 120 70 92 120 52 65 92 120 65 54 92 120 65 53 92 120 56 51 92 120 53 57 92 120 54 49 92 120 69 51 92 120 48 92 120 55 48 92 120 65 50 92 120 51 68 92 120 49 53 92 120 49 66 92 120 68 54 92 120 69 66 92 120 66 70 92 120 65 57 92 120 56 53 92 120 56 51 92 120 55 53 92 120 65 54 92 120 69 92 120 57 56 92 120 57 53 92 120 57 48 92 120 53 57 92 120 53 56 92 120 66 50 92 120 51 54 92 120 67 56 92 120 56 70 92 120 68 66 92 120 57 57 92 120 65 56 92 120 66 48 92 120 54 48 92 120 65 49 92 120 65 53 92 120 68 49 92 120 68 68 92 120 49 68 92 120 52 49 92 120 52 52 92 120 52 69 92 120 53 53 92 120 48 92 120 54 70 92 120 56 92 120 67 56 92 120 67 70 92 120 53 57 92 120 51 92 120 69 65 92 120 70 55 92 120 48 92 120 53 52 92 120 49 56 92 120 67 54 92 120 66 51 92 120 67 48 92 120 67 48 92 120 50 53 92 120 67 51 92 120 50 57 92 120 51 68 92 120 67 56 92 120 57 55 92 120 69 55 92 120 50 55 92 120 49 51 92 120 67 50 92 120 70 56 92 120 66 69 92 120 57 70 92 120 49 49 92 120 69 55 92 120 66 65 92 120 53 92 120 66 68 92 120 66 54 92 120 70 51 92 120 70 70 92 120 52 56 92 120 54 51 92 120 66 66 92 120 50 55 92 120 54 55 92 120 50 50 92 120 66 57 92 120 55 48 92 120 54 65 92 120 65 51 92 120 68 67 92 120 51 54 92 120 54 66 92 120 65 70 92 120 57 69 92 120 51 92 120 53 69 92 120 66 66 92 120 50 53 92 120 49 65 92 120 67 48 92 120 69 67 92 120 65 57 92 120 56 70 92 120 69 57 92 120 69 56 92 120 65 68 92 120 69 49 92 120 57 57 92 120 68 50 92 120 66 68 92 120 70 53 92 120 54 67 92 120 67 66 92 120 68 57 92 120 53 55 92 120 69 53 92 120 67 52 92 120 70 50 92 120 54 57 92 120 51 65 92 120 66 57 92 120 55 68 92 120 70 69 92 120 69 52 92 120 67 66 92 120 56 53 92 120 55 66 92 120 68 49 92 120 66 66 92 120 53 54 92 120 68 67 92 120 66 69 92 120 65 48 92 120 67 70 92 120 68 49 92 120 67 50 92 120 65 51 92 120 65 49 92 120 68 68 92 120 55 55 92 120 69 70 92 120 55 53 92 120 56 48 92 120 49 51 92 120 55 53 92 120 65 55 92 120 54 48 92 120 70 65 92 120 69 48 92 120 70 55 92 120 53 48 92 120 67 54 92 120 65 52 92 120 48 92 120 49 50 92 120 56 50 92 120 50 68 92 120 49 55 92 120 52 92 120 51 56 92 120 68 65 92 120 49 51 92 120 50 92 120 69 56 92 120 54 66 92 120 49 55 92 120 53 69 92 120 56 66 92 120 55 70 92 120 68 69 92 120 50 70 92 120 68 68 92 120 56 70 92 120 54 67 92 120 51 48 92 120 69 51 92 120 66 92 120 56 51 92 120 68 55 92 120 66 56 92 120 57 51 92 120 53 53 92 120 65 55 92 120 67 67 92 120 52 68 92 120 50 68 92 120 66 57 92 120 53 56 92 120 68 50 92 120 70 56 92 120 70 67 92 120 69 48 92 120 52 53 92 120 49 51 92 120 65 92 120 70 67 92 120 53 92 120 54 53 92 120 57 57 92 120 66 53 92 120 50 66 92 120 67 67 92 120 54 92 120 48 92 120 48root@box:~#
复制代码damcool 发表于 2014-01-01 14:13 ![]()
嗨~!现在的年轻人一点点代码调试能力都没有!刚刚找到电脑,看了一下原来的代码只要去掉xargs后面的-i和{} ... |
|