亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: BASH版本的base64 [打印本頁(yè)]

作者: damcool    時(shí)間: 2013-12-31 22:59
標(biāo)題: BASH版本的base64
本帖最后由 damcool 于 2014-01-03 09:22 編輯

AWK版本的base64編解碼腳本有很多限制,特別是在busybox下,作為新年禮物寫(xiě)了一些BASH版本的。如果busybox有hexdump的話(huà);旧蠜](méi)什么問(wèn)題了。速度還可以吧。
更新說(shuō)明
1、去除xargs對(duì)腳本兼容性影響
2、加入對(duì)管道輸入的支持
  1. #!/bin/bash

  2. ################################################################################
  3. # Function Name:   HELP_USAGE                                                   
  4. # Description:     Function to display the usage of the script                  
  5. # Parameters:      None                                                         
  6. # Return:          Help messages                                                
  7. # Called By:       Script Main Loop->Script Parameters' Handler                 
  8. # History:         2013-Dec-31 Initial Edition                       RobinHoo  
  9. ################################################################################

  10. function help_usage(){
  11. cat <<EOF
  12. BASE64 ENCODE & DECODE BASH SCRIPT
  13. Usage: $PROGNAME [OPTION]... [FILE]
  14.   -d, --decode Decode the base64 encoded file
  15.   -h, --help   Show current help message of the script usages
  16.    

  17. Please Report Script Bugs to $AUTHOR_MAIL
  18. EOF
  19. exit 1
  20. }

  21. function BASE64ENCODE()
  22. {
  23.         hexdump -ve '1/1 "%d "' < "$FNAME"|awk -v B64="$BASE64CODE" '{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}}}'
  24. }

  25. function BASE64DECODE()
  26. {
  27.         local buff=""
  28.         for buff in $(cat < "$FNAME"|awk -v B64="$BASE64CODE" '{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 "$buff"; done
  29. }
  30. BASE_DIR=$(cd "$(dirname "$0")" && pwd)
  31. PROGNAME=$(basename "$0")
  32. AUTHOR_MAIL="robin.hoo@hotmail.com"
  33. BASE64CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  34. DECODE=0;
  35. HELP=0;
  36. FNAME="";
  37. while [ $# -gt 0 ]
  38. do
  39.     case "$1" in
  40.     (-d)        DECODE=1;;
  41.     (-h)        HELP=1;;
  42.     (--decode)  DECODE=1;;
  43.     (--help)    HELP=1;;
  44.     (-*)        echo "$PROGNAME: error - unrecognized option or parameter $1" 1>&2; HELP=1;break;;
  45.     (*)         [ "$FNAME" != "" ] && echo "$PROGNAME: error - more than one file name " 1>&2 && HELP=1 && break || FNAME="$1";;
  46.     esac
  47.     shift
  48. done
  49. [ $# -gt 1 ] && HELP=1
  50. [ "$FNAME" == "" ] && FNAME="/dev/stdin"
  51. [ $HELP -eq 1 ] && help_usage

  52. [ $DECODE -eq 1 ] && BASE64DECODE || BASE64ENCODE
復(fù)制代碼

作者: bikkuri    時(shí)間: 2014-01-01 02:12
本帖最后由 bikkuri 于 2014-01-01 03:01 編輯

膜拜了!之前我用awk寫(xiě)的base64編碼和解碼程序確實(shí)效率很低,在CPU 200MHz的Busybox上編碼或者解碼一個(gè)大約4000字節(jié)的二進(jìn)制文件需要大約一分鐘時(shí)間。
說(shuō)實(shí)話(huà),對(duì)您的腳本中的awk的部分我看得還不是很懂,需要時(shí)間消化。
對(duì)您的腳本我有三個(gè)問(wèn)題:
1、貌似function help_usage(){ 這樣定義函數(shù)的方式是awk,在shell下應(yīng)該去掉function;
2、編碼的部分我在busybox下測(cè)試了沒(méi)有問(wèn)題,但是解碼的部分在busybox下測(cè)試報(bào)錯(cuò)而且解碼文件比原文件還要大:
  1. root@unknown:/tmp/test# ./base64.sh -d a.64 > b.gz
  2. xargs: illegal option -- i
  3. root@unknown:/tmp/test# ls -l
  4. -rw-r--r--    1 root     root            36 Jan  1 02:01 a.64
  5. -rw-r--r--    1 root     root            26 Jan  1 02:01 a.gz
  6. -rw-r--r--    1 root     root            48 Jan  1 02:31 b.gz
  7. -rwxr-xr-x    1 root     root          2183 Jan  1 02:29 base64.sh
  8. root@unknown:/tmp/test# more b.gz
  9. SDRzSUFPZDJ3MUlDQS9OSXpjbko1d0lBRmpXV01RWUFBQUE9root@unknown:/tmp/test#
復(fù)制代碼
3、解碼時(shí)在busybox下awk無(wú)法輸出NULL字符,不知道您是怎么解決的?
作者: damcool    時(shí)間: 2014-01-01 10:22
1.Please forget the AWK solution at all
2.Check out the xargs usage in busybox & adjust the decode line accordingly.

Happy New Year !
作者: bikkuri    時(shí)間: 2014-01-01 10:46
I found the xargs information in busybox as below:
  1. xargs
  2. xargs [OPTIONS] [PROG [ARGS]]
  3. Run PROG on every item given by standard input
  4. Options:
  5. -p Ask user whether to run each command
  6. -r Do not run command if input is empty
  7. -0 Input is separated by NUL characters
  8. -t Print the command on stderr before execution
  9. -e[STR] STR stops input processing
  10. -n N Pass no more than N args to PROG
  11. -s N Pass command line of no more than N bytes
  12. -x Exit if size is exceeded
復(fù)制代碼
which option should I use to replace the -i option?

damcool 發(fā)表于 2014-01-01 10:22
1.Please forget the AWK solution at all
2.Check out the xargs usage in busybox & adjust the decode  ...

作者: damcool    時(shí)間: 2014-01-01 11:00
Replace line 32
  1. cat "$FNAME"|awk -v B64="$BASE64CODE" '{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 -i printf {}
復(fù)制代碼
with below line
  1. for raw_data in $(cat "$FNAME"|awk -v B64="$BASE64CODE" '{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
復(fù)制代碼

作者: bikkuri    時(shí)間: 2014-01-01 11:13
After I replaced the line with the new one.
The decode output is double as it should be.
  1. root@unknown:/tmp/test# echo "Hello" > a
  2. root@unknown:/tmp/test# gzip a
  3. root@unknown:/tmp/test# ./base64_encode_decode.sh a.gz > a.64
  4. root@unknown:/tmp/test# ./base64_encode_decode.sh -d a.64 > b.gz
  5. root@unknown:/tmp/test# ls -l
  6. -rw-r--r--    1 root     root            36 Jan  1 11:12 a.64
  7. -rw-r--r--    1 root     root            26 Jan  1 11:12 a.gz
  8. -rw-r--r--    1 root     root            52 Jan  1 11:12 b.gz
  9. -rwxr-xr-x    1 root     root          2197 Jan  1 11:10 base64_encode_decode.sh
  10. root@unknown:/tmp/test#
復(fù)制代碼
damcool 發(fā)表于 2014-01-01 11:00
Replace line 32with below line

作者: damcool    時(shí)間: 2014-01-01 11:32
That's what I could do now, if you can't manage to make it right I can't neither.
作者: bikkuri    時(shí)間: 2014-01-01 12:04
I tested the script on Linux also.
With the xargs line, the decode output is correct, but with the replaced line, the decode output is incorrect.
So the problem is with the replaced line...

damcool 發(fā)表于 2014-01-01 11:32
That's what I could do now, if you can't manage to make it right I can't neither.

作者: damcool    時(shí)間: 2014-01-01 14:13
本帖最后由 damcool 于 2014-01-01 14:15 編輯

嗨~!現(xiàn)在的年輕人一點(diǎn)點(diǎn)代碼調(diào)試能力都沒(méi)有!剛剛找到電腦,看了一下原來(lái)的代碼只要去掉xargs后面的-i和{}就可以正常運(yùn)行了。
  1. cat "$FNAME"|awk -v B64="$BASE64CODE" '{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
復(fù)制代碼
或者
  1. for raw_data in $(cat "$FNAME"|awk -v B64="$BASE64CODE" '{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
復(fù)制代碼

作者: bikkuri    時(shí)間: 2014-01-01 15:40
剛才測(cè)試了一下,確實(shí)可以正常輸出了!
謝謝您的指點(diǎn)!
作者: forgaoqiang    時(shí)間: 2014-01-01 17:29
function 開(kāi)頭定義函數(shù) 這種語(yǔ)法好多shell并不支持吧 ~
作者: damcool    時(shí)間: 2014-01-02 08:06
forgaoqiang 發(fā)表于 2014-01-01 17:29
function 開(kāi)頭定義函數(shù) 這種語(yǔ)法好多shell并不支持吧 ~


如果視力不好,請(qǐng)佩帶眼鏡觀(guān)看!
作者: Shell_HAT    時(shí)間: 2014-01-02 08:29
回復(fù) 11# forgaoqiang


    樓主用的bash沒(méi)有問(wèn)題
作者: forgaoqiang    時(shí)間: 2014-01-02 13:08

嵌入式的shell環(huán)境用多了 習(xí)慣性的不加 function 進(jìn)行定義了 加function的這種語(yǔ)法兼容性不如不加的兼容性好

比如 ash dash(ubuntu的普通用戶(hù)默認(rèn)shell)等等都有這個(gè)問(wèn)題

如果你聽(tīng)力不好 該看看醫(yī)生了 {:3_183:}

damcool 發(fā)表于 2014-01-02 08:06
如果視力不好,請(qǐng)佩帶眼鏡觀(guān)看!

作者: forgaoqiang    時(shí)間: 2014-01-02 13:10
恩 是的 標(biāo)準(zhǔn)的bash應(yīng)該是沒(méi)有問(wèn)題的 看帖的時(shí)候突然想起來(lái)這個(gè)問(wèn)題了 就隨口說(shuō)了一下

不得不佩服這幾個(gè)大神shell的編程功底  收藏下作為“庫(kù)”使用了~

Shell_HAT 發(fā)表于 2014-01-02 08:29
回復(fù) 11# forgaoqiang

作者: bikkuri    時(shí)間: 2014-01-02 13:22
本帖最后由 bikkuri 于 2014-01-02 18:03 編輯

今天抽了點(diǎn)時(shí)間來(lái)仔細(xì)測(cè)試一下這個(gè)程序,發(fā)現(xiàn)解碼的部分還是有問(wèn)題。
我先把原來(lái)的代碼拆解為編碼和解碼兩個(gè)部分:
  1. root@box:~# cat encode.sh
  2. #!/bin/sh
  3. base64encode()
  4. {
  5.         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}}}'
  6. }
  7. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. base64encode
  9. root@box:~# cat decode.sh
  10. #!/bin/sh
  11. base64decode()
  12. {
  13.         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
  14. #       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
  15. }
  16. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  17. base64decode
  18. root@box:~#
復(fù)制代碼
然后分別對(duì)其做測(cè)試,發(fā)現(xiàn)在處理比較小的文件時(shí),工作是正常的。
  1. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > hello.64; cat hello.64|./decode.sh |gzip -cd
  2. Hello

  3. 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 "'
  4. 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:~#
  5. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'
  6. 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:~#
  7. root@box:~# echo Hello|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh |./decode.sh |hexdump -ve '1/1 "%d "'
  8. 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:~#
復(fù)制代碼
但是一旦處理一個(gè)稍微大一點(diǎn)(其實(shí)也不大,大約1700字節(jié)的文本文件,壓縮后約300多字節(jié))的文件時(shí),解碼程序不能輸出所有解碼內(nèi)容:
  1. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'|./encode.sh > led.64; cat led.64|./decode.sh |gzip -cd
  2. gzip: error inflating

  3. root@box:~# cat led|gzip -c|hexdump -ve '1/1 "%d "'
  4. 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:~#

  5. 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 "'
  6. 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:~#
復(fù)制代碼
解碼程序如果改用下面一行不用xargs的命令,則輸出比原文件長(zhǎng)幾倍,而且內(nèi)容也不正確。
  1. 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 "'
  2. 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:~#
復(fù)制代碼
damcool 發(fā)表于 2014-01-01 14:13
嗨~!現(xiàn)在的年輕人一點(diǎn)點(diǎn)代碼調(diào)試能力都沒(méi)有!剛剛找到電腦,看了一下原來(lái)的代碼只要去掉xargs后面的-i和{} ...

作者: damcool    時(shí)間: 2014-01-03 09:23
bikkuri 發(fā)表于 2014-01-02 13:22
今天抽了點(diǎn)時(shí)間來(lái)仔細(xì)測(cè)試一下這個(gè)程序,發(fā)現(xiàn)解碼的部分還是有問(wèn)題。
我先把原來(lái)的代碼拆解為編碼和解碼兩 ...


作了些調(diào)整,支持管道輸入,移除xargs對(duì)兼容性的影響
作者: bikkuri    時(shí)間: 2014-01-03 11:52
這次修改后的程序經(jīng)反復(fù)測(cè)試過(guò)確實(shí)沒(méi)有問(wèn)題了!謝謝!

damcool 發(fā)表于 2014-01-03 09:23
作了些調(diào)整,支持管道輸入,移除xargs對(duì)兼容性的影響

作者: bikkuri    時(shí)間: 2014-01-04 15:35
本帖最后由 bikkuri 于 2014-01-04 17:45 編輯

剛才在另外一個(gè)盒子上測(cè)試發(fā)現(xiàn)又出問(wèn)題了!
  1. root@box:~# cat encode.sh
  2. #!/bin/sh
  3. base64encode()
  4. {
  5. 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}}}'
  6. }
  7. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. base64encode
  9. root@box:~# cat decode.sh
  10. #!/bin/sh
  11. function base64decode()
  12. {
  13. local buff=""
  14. for buff in $(cat < "$FNAME"|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 "$buff"; done
  15. }
  16. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  17. base64decode
  18. root@box:~# echo Hello > a
  19. root@box:~# gzip -c a > a.gz
  20. root@box:~# cat a.gz|./encode.sh > a.64
  21. root@box:~# ls -l
  22. -rw-r--r--    1 root     root             6 Jan  4 17:43 a
  23. -rw-r--r--    1 root     root             0 Jan  4 17:43 a.64
  24. -rw-r--r--    1 root     root            26 Jan  4 17:35 a.gz
  25. -rwxr-xr-x    1 root     root           432 Jan  4 17:41 decode.sh
  26. -rwxr-xr-x    1 root     root           318 Jan  4 09:38 encode.sh
  27. root@box:~#
復(fù)制代碼
后來(lái)發(fā)現(xiàn)這個(gè)盒子上的awk不支持^操作:

  1. BusyBox v1.21.0 (2013-07-24 06:59:49 CEST) built-in shell (ash)
  2. root@jinx:/tmp# awk 'BEGIN{printf("%i\n",5^2)}'
  3. 25
  4. root@jinx:/tmp# awk 'BEGIN{printf("%i\n",5*2)}'
  5. 10
  6. root@jinx:/tmp#

  7. BusyBox v1.21.0 (2013-07-24 09:01:48 CEST) built-in shell (ash)
  8. root@box:~# awk 'BEGIN{printf("%i\n",5^2)}'
  9. root@box:~# awk 'BEGIN{printf("%i\n",5*2)}'
  10. 10
  11. root@box:~# awk --version
  12. awk: invalid option -- -
  13. root@box:~# awk -version
  14. root@box:~# which awk
  15. /usr/bin/awk
  16. root@box:~# ls -l /usr/bin/awk
  17. lrwxrwxrwx    1 root     root            17 Jul 24 07:03 /usr/bin/awk -> ../../bin/busybox
  18. root@box:~#
  19. root@box:~#
復(fù)制代碼
真是太奇怪了,兩個(gè)盒子的busybox的版本號(hào)都一樣啊!
真是郁悶啊!damcool大神還能修改一下您的代碼支持這個(gè)盒子嗎?
作者: damcool    時(shí)間: 2014-01-05 08:42
bikkuri 發(fā)表于 2014-01-04 15:35
剛才在另外一個(gè)盒子上測(cè)試發(fā)現(xiàn)又出問(wèn)題了!后來(lái)發(fā)現(xiàn)這個(gè)盒子上的awk不支持^操作:真是太奇怪了,兩個(gè)盒子的 ...


請(qǐng)善用搜索引擎和自己的大腦。
作者: bikkuri    時(shí)間: 2014-01-08 18:49
本帖最后由 bikkuri 于 2014-01-25 02:58 編輯

謝謝樓主的指點(diǎn)。

damcool 發(fā)表于 2014-01-05 08:42
請(qǐng)善用搜索引擎和自己的大腦。

作者: bikkuri    時(shí)間: 2014-01-23 21:36
本帖最后由 bikkuri 于 2014-01-24 07:09 編輯

花了點(diǎn)時(shí)間研究,終于看懂了樓主的腳本。
樓主腳本中的解碼部分讓awk把解碼后的字符輸出成\x%x的形式再交給shell去實(shí)際輸出二進(jìn)制字符,
有效地避免了在busybox下awk無(wú)法直接輸出NULL字符的問(wèn)題,真是太牛了。。

以下是我根據(jù)樓主的base64編碼改寫(xiě)的uuencode編碼和解碼腳本。。。
關(guān)于uuencode編碼的說(shuō)明,請(qǐng)參考http://zh.wikipedia.org/wiki/Uuencode。
  1. [root@hp8 base]# more uuencode.sh
  2. #!/bin/sh
  3. uuencode()
  4. {
  5. hexdump -ve '1/1 "%d "'|awk '{for(k=0;k*45<=NF;k++){m=(45*k+45<NF)?77:(NF+32-45*k);printf("%c",m);for(i=1;i<=m-32;i+=3){t=0;t=$(i+k*45)*256*256+$(i+k*45+1)*256+$(i+k*45+2);for(j=3;j>=0;j--){c=(i+34-j<=m)?(int(t/2**(6*j))+32):"`";printf("%c",c);t%=2**(6*j)}}printf"\n"}printf"`\n"}'
  6. }
  7. uuencode
  8. [root@hp8 base]# printf "Hello"|./uuencode.sh
  9. %2&5L;&\`
  10. `
  11. [root@hp8 base]#
復(fù)制代碼
  1. #!/bin/sh
  2. uudecode()
  3. {
  4. local buff=""
  5. for buff in $(awk '{for(l=0;l<NR;l++){h=substr($0,1,1);$0=substr($0,2);if(h!="`"){while(length($0)>0){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--){for(c=32;c<96;c++){if(sprintf("%c",c)==a[4-i])break}t=t+2**(6*i)*((a[4-i]=="`")?0:c-32)};for (j=2;j>=0;j--) if (a[4-j]!="`"){printf("\\x%x",t/2**(8*j));t=t%2**(8*j)}}}}printf"\n"}');do printf "$buff";done
  6. }
  7. uudecode
復(fù)制代碼
我的busybox不支持^運(yùn)算的問(wèn)題也解決了,原來(lái)只要把^改寫(xiě)成**就可以了!
謝謝樓主的指點(diǎn)和啟發(fā)。
作者: damcool    時(shí)間: 2014-01-24 08:12
bikkuri 發(fā)表于 2014-01-23 21:36
花了點(diǎn)時(shí)間研究,終于看懂了樓主的腳本。
樓主腳本中的解碼部分讓awk把解碼后的字符輸出成\x%x的形式再交給 ...


Good Job! That's waht I expected to see.
作者: bikkuri    時(shí)間: 2014-01-26 14:42
本帖最后由 bikkuri 于 2014-01-26 23:41 編輯

可是,樓主啊樓主,看來(lái)是我想得太天真了,有一部分盒子硬是不支持^和**運(yùn)算啊。。。
  1. BusyBox v1.22.0 (2014-01-10 07:58:26 CET) built-in shell (ash)
  2. Enter 'help' for a list of built-in commands.

  3. root@box:~# awk 'BEGIN{printf("%i\n",5^3)}'
  4. root@box:~# awk 'BEGIN{printf("%i\n",5**3)}'
  5. root@box:~#
復(fù)制代碼
看來(lái)還是得重新發(fā)明一下輪子啊。。。

作者: bikkuri    時(shí)間: 2014-01-27 03:16
再次改寫(xiě)了這幾個(gè)編碼解碼腳本,用循環(huán)*代替了^和**運(yùn)算,這下總算在所有的盒子上都可以正常運(yùn)行了。
  1. #!/bin/sh
  2. base64_decode()
  3. {
  4. local buff=""
  5. for buff 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--){z=1;for(p=0;p<6*i;p++)z=z*2;t=t+z*((a[4-i]=="=")?0:index(B64,a[4-i])-1)}for(i=2;i>=0;i--)if(a[4-i]!="="){y=1;for(p=0;p<8*i;p++)y=y*2;printf("\\x%x",t/y);t%=y}}printf"\n"}');do printf "$buff"; done
  6. }
  7. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  8. base64_decode
復(fù)制代碼
  1. #!/bin/sh
  2. base64_encode()
  3. {
  4. hexdump -ve '1/1 "%d "'|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--){z=1;for(p=0;p<6*j;p++)z=z*2;c=(i+2-j<=NF)?substr(B64,int(t/z)+1,1):"=";printf("%c",c);t%=z;if(++k==76)printf"\n";k%=76}}}'
  5. }
  6. CODE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  7. base64_encode
復(fù)制代碼
  1. #!/bin/sh
  2. uu_decode()
  3. {
  4. local buff=""
  5. for buff in $(awk '{for(l=0;l<NR;l++){h=substr($0,1,1);$0=substr($0,2);if(h!="`"){while(length($0)>0){split(substr($0,1,4),a,"");$0=substr($0,5);t=0;for(i=3;i>=0;i--){for(c=32;c<96;c++){if(sprintf("%c",c)==a[4-i])break}z=1;for(p=0;p<6*i;p++)z=z*2;t=t+z*((a[4-i]=="`")?0:c-32)};for (j=2;j>=0;j--) if (a[4-j]!="`"){y=1;for(p=0;p<8*j;p++)y=y*2;printf("\\x%x",t/y);t%=y}}}}printf"\n"}');do printf "$buff";done
  6. }
  7. uu_decode
復(fù)制代碼
  1. #!/bin/sh
  2. uu_encode()
  3. {
  4. hexdump -ve '1/1 "%d "'|awk '{for(k=0;k*45<=NF;k++){m=(45*k+45<NF)?77:(NF+32-45*k);printf("%c",m);for(i=1;i<=m-32;i+=3){t=0;t=$(i+k*45)*256*256+$(i+k*45+1)*256+$(i+k*45+2);for(j=3;j>=0;j--){z=1;for(p=0;p<6*j;p++)z=z*2;c=(i+34-j<=m)?(int(t/z)+32):"`";printf("%c",c);t%=z}}printf"\n"}printf"`\n"}'
  5. }
  6. uu_encode
復(fù)制代碼

作者: bikkuri    時(shí)間: 2014-02-04 05:13
本帖最后由 bikkuri 于 2014-02-03 23:56 編輯

但是樓主啊,不好意思,我又發(fā)現(xiàn)一個(gè)問(wèn)題:
這個(gè)base64編解碼程序和標(biāo)準(zhǔn)的Linux下的base64程序不兼容?
用這個(gè)base64程序編碼后的文件用標(biāo)準(zhǔn)的Linux自帶的base64程序來(lái)解碼后報(bào)錯(cuò):
  1. [root@hp8 base]# base64 -d backup.tar.gz.64 |tar zx
  2. base64: invalid input

  3. gzip: stdin: unexpected end of file
  4. tar: Child returned status 1
  5. tar: Error exit delayed from previous errors
  6. [root@hp8 base]# cat backup.tar.gz.64 |base64 -d|tar zx
  7. base64: invalid input

  8. gzip: stdin: unexpected end of file
  9. tar: Child returned status 1
  10. tar: Error exit delayed from previous errors
復(fù)制代碼
但是用這個(gè)base64程序來(lái)解碼則沒(méi)有任何問(wèn)題,可以成功解碼并解壓縮出原來(lái)的文件。
  1. [root@hp8 base]# cat backup.tar.gz.64 |./64decode.sh |tar zx
  2. tar: tmp/hct.log: time stamp 2014-02-04 07:52:13 is 10876 s in the future
  3. tar: tmp/index.php: time stamp 2014-02-04 08:00:29 is 11372 s in the future
  4. tar: tmp/master.log: time stamp 2014-02-04 08:00:29 is 11372 s in the future
  5. tar: tmp/signaling.log.20140203.tgz: time stamp 2014-02-04 08:00:29 is 11372 s in the future
  6. tar: tmp/sync.log: time stamp 2014-02-04 07:55:29 is 11072 s in the future
  7. tar: tmp/vtn.log: time stamp 2014-02-04 07:55:29 is 11072 s in the future
  8. tar: tmp/xfer.log: time stamp 2014-02-04 08:00:22 is 11365 s in the future
  9. [root@hp8 base]#
復(fù)制代碼
到底是什么導(dǎo)致了這個(gè)base64程序和標(biāo)準(zhǔn)的Linux下的base64程序不兼容呢?


作者: bikkuri    時(shí)間: 2014-02-04 06:00
本帖最后由 bikkuri 于 2014-02-03 23:53 編輯

剛才用這個(gè)base64程序和Linux的標(biāo)準(zhǔn)base64程序同時(shí)對(duì)同一個(gè)文件進(jìn)行編碼,然后檢查編碼后的文本,
發(fā)現(xiàn)標(biāo)準(zhǔn)base64程序的輸出結(jié)果比這個(gè)base64程序在文件結(jié)尾處多了一個(gè)0a換行字符。
  1. [root@hp8 base]# cat test.tgz |./64encode.sh > a.64
  2. [root@hp8 base]# cat test.tgz |base64 > b.64
  3. [root@hp8 base]# diff a.64 b.64
  4. 141c141
  5. < FpA8Z1kT3ym62gukZQs69VjWKdDN0aep/znJ2rgqyv91ewDfUJN9Pp///vsfyE3WdCQpAAA=
  6. \ No newline at end of file
  7. ---
  8. > FpA8Z1kT3ym62gukZQs69VjWKdDN0aep/znJ2rgqyv91ewDfUJN9Pp///vsfyE3WdCQpAAA=
  9. [root@hp8 base]# tail -n 1 a.64 |hexdump -C
  10. 00000000  46 70 41 38 5a 31 6b 54  33 79 6d 36 32 67 75 6b  |FpA8Z1kT3ym62guk|
  11. 00000010  5a 51 73 36 39 56 6a 57  4b 64 44 4e 30 61 65 70  |ZQs69VjWKdDN0aep|
  12. 00000020  2f 7a 6e 4a 32 72 67 71  79 76 39 31 65 77 44 66  |/znJ2rgqyv91ewDf|
  13. 00000030  55 4a 4e 39 50 70 2f 2f  2f 76 73 66 79 45 33 57  |UJN9Pp///vsfyE3W|
  14. 00000040  64 43 51 70 41 41 41 3d                           |dCQpAAA=|
  15. 00000048
  16. [root@hp8 base]# tail -n 1 b.64 |hexdump -C
  17. 00000000  46 70 41 38 5a 31 6b 54  33 79 6d 36 32 67 75 6b  |FpA8Z1kT3ym62guk|
  18. 00000010  5a 51 73 36 39 56 6a 57  4b 64 44 4e 30 61 65 70  |ZQs69VjWKdDN0aep|
  19. 00000020  2f 7a 6e 4a 32 72 67 71  79 76 39 31 65 77 44 66  |/znJ2rgqyv91ewDf|
  20. 00000030  55 4a 4e 39 50 70 2f 2f  2f 76 73 66 79 45 33 57  |UJN9Pp///vsfyE3W|
  21. 00000040  64 43 51 70 41 41 41 3d  0a                       |dCQpAAA=.|
  22. 00000049
復(fù)制代碼
但是這應(yīng)該沒(méi)有問(wèn)題?
后來(lái)在網(wǎng)上找了一下,據(jù)說(shuō)RHEL5自帶的base64工具有BUG,base64解碼時(shí)莫名出錯(cuò):base64: invalid input。
http://www.shangxueba.com/jingyan/121721.html
我的Linux服務(wù)器是CentOS release 5.4 (Final),可能跟這個(gè)bug也沾邊靠譜。。。
  1. [root@hp8 base]# echo "Hello" | base64 | base64 -d
  2. Hello
  3. base64: invalid input
  4. [root@hp8 base]# echo -n $(echo "Hello"|base64)|base64 -d
  5. Hello
  6. [root@hp8 base]#
  7. [root@hp8 base]# echo "Hello"|base64|hexdump -C
  8. 00000000  53 47 56 73 62 47 38 4b  0a                       |SGVsbG8K.|
  9. 00000009
  10. [root@hp8 base]# echo -n $(echo "Hello"|base64)|hexdump -C
  11. 00000000  53 47 56 73 62 47 38 4b                           |SGVsbG8K|
  12. 00000008
  13. [root@hp8 base]#
  14. [root@hp8 base]# base64 --version
  15. base64 (GNU coreutils) 5.97
  16. Copyright (C) 2006 Free Software Foundation, Inc.
  17. This is free software.  You may redistribute copies of it under the terms of
  18. the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
  19. There is NO WARRANTY, to the extent permitted by law.

  20. Written by Simon Josefsson.
  21. [root@hp8 base]#
  22. [root@hp8 base]#
復(fù)制代碼
哎。。。那就怪不得我了。。。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2