@echo off
setlocal enabledelayedexpansion
set /p shu=
set yushu=
set zhongshang=
set shang=
set beichushu=
set jieguo=
set base=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
:cal
set beichushu=%yushu%%shu:~0,1%
set shu=%shu:~1,100000%
set /a "shang=beichushu>>24"
set zhongshang=%zhongshang%%shang%
if "%zhongshang%"=="0" set zhongshang=
set /a "yushu=beichushu&0xFFFFFF"
if NOT "%shu%"=="" goto cal
set tt=
set /a "a1=(yushu>>16)&0xFF"
set /a "a2=yushu&0xFF00"
set /a "a3=(yushu&0xFF)<<16"
set /a "a=a1|a2|a3"
if NOT "%zhongshang%"=="" goto b1
if NOT %a2% EQU 0 goto b0
if %a1% EQU 0 goto b2
goto b1
:b0
if %a1% EQU 0 goto b3
:b1
set /a "b=a&077"
set tmp=!base:~%b%,1!
set tt=%tmp%%tt%
set /a "b=a&07700"
set /a "b>>=6"
set tmp=!base:~%b%,1!
set tt=%tmp%%tt%
:b2
set /a "b=a&0770000"
set /a "b>>=12"
set tmp=!base:~%b%,1!
set tt=%tmp%%tt%
:b3
set /a "b=a&077000000"
set /a "b>>=18"
set tmp=!base:~%b%,1!
set tt=%tmp%%tt%
set jieguo=%jieguo%%tt%
set yushu=
set shu=%zhongshang%
set zhongshang=
if NOT "%shu%"=="" goto cal
echo %jieguo%
pause
goto :eof
:eof
妳試試看,輸入數字就行了,然後想改成從文件讀取妳自己應該可以吧。解密的還差16進制轉10進制。。。好麻煩,不想弄了,要不妳看我這個的思路編吧
如果有bug跟我討論討論
另附base64 解密
@echo off
setlocal enabledelayedexpansion
set base=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
for /l %%i in (0,1,25) do (
set !base:~%%i,1!=%%i
)
:start
set /p str=
:loop
::每個loop取出4個字符 轉成壹個24位的數字
set s1=%str:~0,1%
set s2=%str:~1,1%
set s3=%str:~2,1%
set s3=%str:~3,1%
if "%s2%"=="" set s2=A
if "%s3%"=="" set s3=A
if "%s4%"=="" set s4=A
set str=%str:~3,1000%
call ::getnum %s1% num1
call ::getnum %s2% num2
call ::getnum %s3% num3
call ::getnum %s4% num4
echo %num1% %num2% %num3%
set "num1=(num1<<18)||(num2<<12)||(num3<<6)||num4"
set "num1=(num1>>16)||(num1&0xff00)||((num1&0xff)<<16)"
:while
if NOT "%str%"=="" goto loop
goto start
pause
goto eof
:getnum
if "%1"=="+" (
set num=62
goto return
)
if "%1"=="/" (
set num=63
goto return
)
if %1 LSS a goto number
set num=!%1!
if NOT "%1" EQU "!base:~%num%,1!" set /a num=num+26
goto return
:number
set /a num=s1+52
:return
set /a %2=num
:eof