我正在将一个经典ASP应用程序转换为C#,希望能够在C#中解密最初在经典ASP中加密的字符串。经典ASP代码在这里,而C#代码在这里。我面临的问题是ASP和C#中Encrypt和Decrypt方法的签名不同。这是我的解密ASP代码,它包装了解密代码。
Function AESDecrypt(sCypher)
if sCypher <> "" then
Dim bytIn()
Dim bytOut
Dim bytPassword()
Dim lCount
Dim lLength
Dim sTemp
Dim sPassword
sPassword = "My_Password"
lLength = Len(sCypher)
ReDim bytIn(lLength/2-1)
For lCount = 0 To lLength/2-1
bytIn(lCount) = CByte("&H" & Mid(sCypher,lCount*2+1,2))
Next
lLength = Len(sPassword)
ReDim bytPassword(lLength-1)
For lCount = 1 To lLength
bytPassword(lCount-1) = CByte(AscB(Mid(sPassword,lCount,1)))
Next
bytOut = DecryptData(bytIn, bytPassword) //' this is the problem child
lLength = UBound(bytOut) + 1
sTemp = ""
For lCount = 0 To lLength - 1
sTemp = sTemp & Chr(bytOut(lCount))
Next
AESDecrypt = sTemp
End if
End Function
然而,在C#中,我很难转换这个函数,因为DecryptData的C#等效函数有更多的参数。
public static byte[] DecryptData(byte[] message, byte[] password,
byte[] initialisationVector, BlockSize blockSize,
KeySize keySize, EncryptionMode cryptMode)
{...}
我希望您能够提供初始向量、块大小、密钥大小和加密模式的合适取值,以便能够像经典的ASP代码一样进行解密。
DecryptData()
函数的作用。但是,您可能正在使用不安全的ECB模式。 - SLaks