Autoit3 进行RSA加解密-支持中英文混合

Views: 49

RSA是一种基于数论的非对称加密算法,广泛应用于数据加密和数字签名等领域。它使用两个密钥:公钥和私钥。公钥用于加密数据,私钥用于解密数据。

本文在众多网友的基础上,实现了使用_RSA_crypt.au3库进行RSA对中英文混合字符串的加解密。

其中最重要的,便是使用了字符串的编码转换,先精准识别所有单双字节的内容,并转换成统一的单字节,进行加密。解密完成后,再将解密的单字节内容转换为双字节内容。

    ; 将原始文本转换为二进制数据,使用UTF-16编码以支持多字节文本和单字节文本的混合内容,例如:英文,中文,日文,....
    Local $bBinaryData = StringToBinary($sOriginalText, 4)

    ; 使用 BinaryToString 函数将解密后的二进制数据转换回原始文本
    Local $sOriginalText = BinaryToString('0x'& $sDecryptedText, 4)

使用说明

  1. 安装AutoIt:确保您已安装AutoIt,并已将_RSA_crypt.au3库添加到您的Autoit3安装目录中,例如:D:\AutoItV3\Include\_RSA_crypt.au3
  2. 定义密钥:在代码中定义公钥和私钥。您可以通过修改 $iPublicKeyExponent$iModulus$iPrivateKeyExponent 变量来设置RSA密钥的参数。
  3. 准备加密文本:在 $sPlainText 变量中输入要加密的文本。
  4. 运行代码:运行代码,在编辑器的控制台将会输出加密前的文本、加密后的文本和解密后的文本。

怎么增强

您可以增加RSA密钥的长度来增强加密的安全性。此外,您还可以实现密钥管理和安全存储机制,以确保密钥的安全性。

代码内容

#include '_RSA_crypt.au3'

Opt('MustDeclareVars', 1) ; 设置必须声明变量,这样可以避免在代码中意外使用未声明的变量

; 定义RSA公钥和私钥的参数
Global $iPublicExponent = 10448737 ; E: 公开指数(public exponent)
Global $iModulusParam = 15861917 ; N: 模数(modulus)
Global $iPrivateExponent = 11935633 ; D:私钥指数(private exponent)
;公钥和私钥的长度是由 $iPublicKeyExponent,$iModulus 和 $iPrivateKeyExponent 这三个参数决定的。
;可以通过增加这些参数的值来增加密钥的长度,从而增加加密的安全性。
;但是需要确保这些参数的值是大的质数,并且它们需要满足 RSA 算法的要求。


; 定义待加密的文本字符串
Global $sOriginalText = '欢迎访问xyx115.com网站,我是迷路轮回,是一名IT技术爱好者!'
ConsoleWrite(@CRLF & "原始文本:" & @CRLF & $sOriginalText & @CRLF)

; 使用公钥加密原始文本
Global $sCipherText = EncryptText($sOriginalText, $iPublicExponent, $iModulusParam)
ConsoleWrite(@CRLF & "加密后的二进制字符串:" & @CRLF & $sCipherText & @CRLF)

; 使用私钥解密加密后的文本
Global $sDecryptedText = DecryptText($sCipherText, $iPrivateExponent, $iModulusParam)
ConsoleWrite(@CRLF & "解密后的文本:" & @CRLF & $sDecryptedText & @CRLF)

; 定义加密函数
Func EncryptText($sOriginalText, $iPublicExponent, $iModulusParam)

    ; 将原始文本转换为二进制数据,使用UTF-16编码以支持多字节文本和单字节文本的混合内容,例如:英文,中文,日文,....
    Local $bBinaryData = StringToBinary($sOriginalText, 4)

    ; 使用公钥和模数参数,对二进制数据进行RSA加密
    Local $sCipherText = _RSA_EnCrypt(StringTrimLeft($bBinaryData, 2), $iPublicExponent, $iModulusParam)

    ; 将加密后的文本转换为二进制数据,以便于存储和传输
    Local $bBinaryData = StringToBinary($sCipherText, 4)

    ; 返回加密后的二进制数据
    Return $bBinaryData

EndFunc

; 定义解密函数
Func DecryptText($sCipherText, $iPrivateExponent, $iModulusParam)

    ; 将加密后的二进制数据转换为字符串,以便于RSA解密
    Local $sCipherString = BinaryToString($sCipherText, 4)

    ; 使用私钥和模数参数,对字符串进行RSA解密
    Local $sDecryptedText = _RSA_DeCrypt($sCipherString, $iPrivateExponent, $iModulusParam)

    ; 使用 BinaryToString 函数将解密后的二进制数据转换回原始文本
    Local $sOriginalText = BinaryToString('0x'& $sDecryptedText, 4)

    ; 返回解密后的原始文本
    Return $sOriginalText

EndFunc

执行后控制台显示内容示例

下载:

注:

  1. _RSA_crypt.au3的作者发布在https://www.autoitscript.com/forum/topic/184328-how-to-use-rsa-with-cryptau3-or-anything-else/,但其中的下载链接已经失效了。
  2. 我下载的_RSA_crypt.au3 来源于:au3国外RSA加密资料-『 中文资料 』-AUTOIT CN – (autoitx.com),下载链接也失效了。
  3. 感谢各位大佬的分享

发表评论