|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『楼 主』:
[思路挑战][讨论]批处理做 Base64 编码运算 理论原型
::base64conv.cmd::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off
setlocal enabledelayedexpansion
set code=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
set /A B1=10,B2=0x7f,B3=255
echo %B1% %B2% %B3%
:: byte-triplet to base64-quadruple 第一次echo要encode的几个ASCII字符
set /A Q1=(%B1% "&" 252) ">>" 2
set /A Q2=((%B1% "&" 3) "<<" 4) + ((%B2% "&" 240) ">>" 4)
set /A Q3=((%B2% "&" 15) "<<" 2) + ((%B3% "&" 192) ">>" 6)
set /A Q4=(%B3% "&" 63)
::
echo %Q1% %Q2% %Q3% %Q4% 第二次echo已经encode完毕
echo !code:~%Q1%,1! !code:~%Q2%,1! !code:~%Q3%,1! !code:~%Q4%,1!
:: base64-quadruple to byte-triplet 第三次echo Base64字符流出来了!
:: yes, I know, to work a loop to find the pos in %code% should be here.
set /A B1=(%Q1% "<<" 2) + ((%Q2% "&" 48) ">>" 4)
set /A B2=((%Q2% "&" 15) "<<" 4) + ((%Q3% "&" 60) ">>" 2)
set /A B3=((%Q3% "&" 3) "<<" 6) + %Q4%
::
echo %B1% %B2% %B3% 第四次echo decode到原来的字符
::base64conv.cmd:::::::::::::::::::::::::::::::::::::::::::::::::::::::: 可见 set /a 的位运算的强大了!以上代码我完全没有看懂,详情见
groups.google.com/group/alt.ms ...
各位 版主、 高手、 潜水的大侠都出来想想怎么实现用纯批处理做BASE64编码/解码?
做Base64的算法理论研究是十分有用的,很简单的例子就是:批处理加密,二进制文件嵌入bat,处理EMail,等等。
[ Last edited by electronixtar on 2006-11-15 at 01:25 AM ]
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-13 13:07 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
2 楼』:
我先提一个思路,用 fc 命令获得文件流的每一个字节的ASCII码。(其实fc的很多用处被大家忽略了)。但是,用什么来把ASCII码还原成字符呢?包括一些批处理不能处理的 乱码、不可见字符 呢(ASCII码128以后的那些)?
btw,新手们,搞理论研究很枯燥,但是很有用,请你们多多支持,多多理解!其实我们联盟的某些方面的批处理技术已经是世界顶尖水准了。
[ Last edited by electronixtar on 2006-11-13 at 01:27 PM ]
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-13 13:23 |
|
|
pengfei
银牌会员
    
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
3 楼』:
electronixtar这个思路非常好, 相信理解这个概念并掌握他以后会有很大用途.
|
|
2006-11-15 00:23 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
4 楼』:
原来没人感兴趣~~~哇啦哇啦哇啦伤心啦
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-15 01:12 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
   『第
5 楼』:
再贴一个世界顶尖级牛人 Herbert Kleebauer 写的 base64.cmd @echo off
setlocal enabledelayedexpansion
set infile=a.txt
:: set infile=%1
for %%i in (%infile%) do set outfile=%%~ni.b64
echo --->%outfile%
echo Content-Type: application/octet-stream; name="%infile%">>%outfile%
echo Content-Transfer-Encoding: base64>>%outfile%
echo Content-Disposition: inline; filename="%infile%">>%outfile%
echo.>>%outfile%
set t=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
for %%i in (%infile%) do set n=%%~zi
if [%n%]==[0] goto :eof
set /p=<nul>_.a
set /p=<nul>_.b
set /p=a<nul>_.a1
set /p=b<nul>_.b1
set m=1
set /a i=-2
:loop
set /a k="%m%&%n%"
if not [%k%]==[0] copy /b _.a + _.a1>nul
if not [%k%]==[0] copy /b _.b + _.b1>nul
set /a k="%i%&%n%"
if [%k%]==[0] goto :exit
type _.a1>>_.a1
type _.b1>>_.b1
set /a m=m*2
set /a i=i*2
goto :loop
:exit
fc /b %infile% _.a|find ":">_.a1
fc /b %infile% _.b|find ":">>_.a1
sort _.a1>_.b1
set n=
set m=0
set k=0
set q=0
for /f "tokens=1,2" %%i in (_.b1) do (
if not [!n!]==[%%i] (
set i=%%j
call :dig !i:~0,1!
set /a m=!m!*16+!j!
call :dig !i:~1,1!
set /a m=m*16+j
set /a k=k+1
if !k!==3 (
set /a p="m>>18"
call set x=!x!%%t:~!p!,1%%
set /a p="(m>>12)&63"
call set x=!x!%%t:~!p!,1%%
set /a p="(m>>6)&63"
call set x=!x!%%t:~!p!,1%%
set /a p="m&63"
call set x=!x!%%t:~!p!,1%%
set /a q=q+1
if [!q!]==[18] (
echo !x!>>%outfile%
set x=
set q=0)
set m=0
set k=0))
set n=%%i)
if [%k%]==[1] (
set /a p="m>>2"
call set x=!x!%%t:~!p!,1%%
set /a p="(m<<4)&63"
call set x=!x!%%t:~!p!,1%%==)
if [%k%]==[2] (
set /a p="m>>10"
call set x=!x!%%t:~!p!,1%%
set /a p="(m>>4)&63"
call set x=!x!%%t:~!p!,1%%
set /a p="(m<<2)&63"
call set x=!x!%%t:~!p!,1%%=)
if not [%q%]==[0] echo %x%>>%outfile%
echo.>>%outfile%
echo ----->>%outfile%
del _.a
del _.a1
del _.b
del _.b1
goto :eof
:dig
set j=%1
if [%1]==[A] set j=10
if [%1]==[B] set j=11
if [%1]==[C] set j=12
if [%1]==[D] set j=13
if [%1]==[E] set j=14
if [%1]==[F] set j=15
此帖被 +7 点积分 点击查看详情 评分人:【 redtek 】 | 分数: +5 | 时间:2006-11-15 02:49 | 评分人:【 0401 】 | 分数: +2 | 时间:2007-1-11 00:43 |
|
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-15 01:20 |
|
|
pengfei
银牌会员
    
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
6 楼』:
不是不感兴趣, 只是我这样的菜鸟功力不够, 就听你讲课, 多长点见识, 呵呵~
|

业精于勤而荒于嬉,形成于思而毁于随。 |
|
2006-11-15 01:21 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
7 楼』:
pengfei你都高会了还菜鸟~~~太谦虚了吧,至少也算老鸟~~
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-15 01:27 |
|
|
pengfei
银牌会员
    
积分 1218
发帖 485
注册 2006-7-21 来自 湖南.娄底
状态 离线
|
『第
8 楼』:
呵呵~ electronixtar兄过奖了, 我是真不会.
|

业精于勤而荒于嬉,形成于思而毁于随。 |
|
2006-11-15 01:35 |
|
|
ccwan
金牌会员
     
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
9 楼』:
electronixtar兄,每一行后都有一个空格,害得我以为代码有问题呢。
|

三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-11-15 01:35 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第
10 楼』:
谁说没人感兴趣~~
这个帖子太好了,值得好好的研究一下~~~顶一个先~
|
|
2006-11-15 01:46 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
『第
11 楼』:
re ccwan:
我是直接复制粘贴的~~汗~~
|

C:\>BLOG initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>" |
|
2006-11-15 04:49 |
|
|
electronixtar
铂金会员
      
积分 7493
发帖 2672
注册 2005-9-2
状态 离线
|
|
2006-11-18 01:29 |
|
|
ccwan
金牌会员
     
积分 2725
发帖 1160
注册 2006-9-23 来自 河北廊坊
状态 离线
|
『第
13 楼』:
好东西。泡妞密文。
|

三人行,必有吾师焉。 学然后知不足,教然后知困,然后能自强也。 |
|
2006-11-18 01:43 |
|
|
redtek
金牌会员
     
积分 2902
发帖 1147
注册 2006-9-21
状态 离线
|
『第
14 楼』:
欣赏~~
|

Redtek,一个永远在网上流浪的人……
_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._ |
|
2006-11-18 02:06 |
|
|
vkill
金牌会员
     
积分 4103
发帖 1744
注册 2006-1-20 来自 甘肃.临泽
状态 离线
|
『第
15 楼』:
我还是没有看到具体怎么“加密”
|
|
2006-11-18 02:25 |
|