- 论坛徽章:
- 18
|
本帖最后由 bikkuri 于 2013-12-30 22:20 编辑
谢谢您的回复和您的程序!
您的程序比我写的简练多了,学习了!
以下是我修改后的可以在busybox下正确运行的base64编码脚本,
最后再次感谢大家的指点和帮助。- #!/bin/sh
- base64encode()
- {
- /usr/bin/awk -- '
- function base64_and(var,x,l_res,l_i)
- {
- l_res=0;
- for (l_i=0;l_i<8;l_i++){
- if (var%2==1 && x%2==1) l_res=l_res/2+128;
- else l_res/=2;
- var=int(var/2);
- x=int(x/2);
- }
- return l_res;
- }
- function base64_lshift(var,x)
- {
- while(x>0){
- var*=2;
- x--;
- }
- return var;
- }
- function base64_rshift(var,x)
- {
- while(x>0){
- var=int(var/2);
- x--;
- }
- return var;
- }
- BEGIN{
- BASE64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
- result="";
- }
- {
- for (i=1;i<=NF;i=i+3)
- {
- byte1=sprintf ("%d", "0x" $i);
- byte2=sprintf ("%d", "0x" $(i+1));
- byte3=sprintf ("%d", "0x" $(i+2));
- base1=base64_rshift(byte1,2);
- base2=base64_lshift(base64_and(byte1,3),4)+base64_rshift(base64_and(byte2,240),4);
- base3=base64_lshift(base64_and(byte2,15),2)+base64_rshift(base64_and(byte3,192),6);
- base4=base64_and(byte3,63);
- # printf "byte1=%i byte2=%i byte3=%i\n", byte1, byte2, byte3;
- # printf "base1=%i base2=%i base3=%i base4=%i\n", base1, base2, base3, base4;
- if (NF-i==1){
- result=result substr(BASE64,base1+1,1);
- result=result substr(BASE64,base2+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 "=";
- }
- if (NF-i>=3){
- 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);
- }
- # printf "Result=%s\n", result;
- }
- printf "%s",result;
- }
- '
- }
- base64encode
复制代码 回复 35# damcool
|
|