|
|
发表于 2023-1-28 22:19:50
|
显示全部楼层
本帖最后由 HOPE2021 于 2023-1-29 07:06 编辑
回复 4# 谐夜落风
请将此实例另存为 EnCode.Bat,加密和解密都可以使用此脚本进行操作,只有相同的密码才能保证解密成功。
兼容性说明:
Windows Vista 及更高版本的 Windows 操作系统
速度说明:较慢,不建议处理 4 KB 以上内容
附注:此程序处理较大文件时可能产生未知 Bug
参数说明:- Encode InFile OutFile PasFile
- InFile 明文文件
- OutFile 密文文件
- Pasword 密码(范围:-2,147,483,648 到 2,147,483,647)(若为 0 则等同于不加密)
复制代码 代码:- @Echo Off
- If "%~3" == "" (
- @Call :Usage
- @Exit /B 1
- )
- @Goto :Main
- :Main
- If Not Exist "%~1" (
- Echo.错误:无法访问明文文件
- @Exit /B 2
- )
- SetLocal EnableExtensions DisableDelayedExpansion
- For /F "Delims= Skip=1" %%_ in ('Certutil -hashFile "%~1" SHA256') Do (
- If Not Defined strHashInFile Set strHashInFile=%%_
- )
- For /F "Delims=" %%_ in ('Dir /B %~1') Do (
- Set lngFileSize=%%~z_
- )
- Certutil -EnCodeHex -F "%~1" %strHashInFile%.tmp
- SetLocal EnableExtensions EnableDelayedExpansion
- For /F "Tokens=1,2 Delims= " %%_ in ('Type "%strHashInFile%.tmp"') Do (
- Set /A lngTemp=0x%%_
- Set Line[!lngTemp!]=%%`
- )
- Set /A "lngTemp=lngFileSize"
- For /L %%_ in (0,16,%lngTemp%) Do (
- Set Line[%%_]=!Line[%%_]:~0,48!
- )
- Set lngIndex=0
- For /L %%_ in (0,16,%lngTemp%) Do (
- For %%# in (!Line[%%_]!) Do (
- If "%%#" Neq "" (
- Set /A bytData[!lngIndex!]=0x%%#
- Set /A lngIndex+=1
- )
- )
- )
- Set /A "lngTemp=%~3"
- For /L %%_ in (0,1,3) Do (
- Set /A "bytPassword[%%_]=lngTemp%%256"
- Set /A "lngTemp=(lngTemp-lngTemp%%256)/256"
- )
- For %%_ in (0 1 2 3 4 5 6 7 8 9 A B C D E F) Do (
- For %%` in (0 1 2 3 4 5 6 7 8 9 A B C D E F) Do (
- Set /A lngTemp=0x%%_%%`
- Set bytHexTab[!lngTemp!]=%%_%%`
- )
- )
- Set /A "lngTemp=lngIndex-1"
- For /L %%_ in (0,1,%lngTemp%) Do (
- Set /A "bytTemp=(%%_)%%4"
- Set /A "bytData[%%_]=bytData[%%_]^^bytPassword[!bytTemp!]"
- )
- Cd. > %strHashInFile%.tm$
- For /L %%_ in (0,1,%lngTemp%) Do (
- For %%` in (!bytData[%%_]!) Do (
- Set /P strTemp=!bytHexTab[%%`]! < Nul >> %strHashInFile%.tm$
- )
- )
- Certutil -DeCodeHex -F %strHashInFile%.tm$ "%~2"
- If Exist %strHashInFile%.tmp Del %strHashInFile%.tmp
- If Exist %strHashInFile%.tm$ Del %strHashInFile%.tm$
- EndLocal
- EndLocal
- @Exit /B 0
- :Usage
- Echo.Encode InFile OutFile PasFile
- Echo.
- Echo. InFile 明文文件
- Echo. OutFile 密文文件
- Echo. Pasword 密码(范围:-2,147,483,648 到 2,147,483,647)(若为 0 则等同于不加密)
- @Goto :Eof
复制代码 |
|