说我知道:
a)一些纯文本使用以下128位密钥加密: 7,185,138,208,128,211,227,11,63,145,255,245,1,7,177,231
b)空字符串ALWAYS加密到以下base64:MEUxILm04F / S2qSIlJKdPQ ==
c)一串662-862-4967总是加密到以下base64:Zu51CRz6DOsTiLc8KhP1Aw ==
d)加密方法可能是AES 128,块大小为128位。
如果在CBC模式下实施AES,是否可以(和/或直接)退出使用的IV?
我一直在尝试在各种模式下使用RijndaelManaged()重新创建MEUxILm04F / S2qSIlJKdPQ ==(在base64之后)的cypher文本,并使用(如果适用)不同的简单IV,如全零,但我无法重现。
这是我用来尝试加密空字符串以获取MEUxILm04F / S2qSIlJKdPQ ==的代码 使用上面的键输入(注释行是我尝试过的东西):
Public Shared Function Encrypt(ByVal toEncrypt As String, ByVal keyArray As [Byte]()) As String
Dim toEncryptArray As Byte() = UTF8Encoding.UTF8.GetBytes(toEncrypt)
'Dim IV As Byte() = New Byte() {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
Dim IV As Byte() = New Byte(15) {}
Dim rDel As New RijndaelManaged()
rDel.KeySize = 128
rDel.BlockSize = 128
rDel.IV = IV
rDel.Key = keyArray
'rDel.Mode = CipherMode.ECB
rDel.Mode = CipherMode.CBC
rDel.Padding = PaddingMode.PKCS7
'rDel.Padding = PaddingMode.Zeros
Dim cTransform As ICryptoTransform = rDel.CreateEncryptor()
Dim resultArray As Byte() = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length)
Return Convert.ToBase64String(resultArray, 0, resultArray.Length)
End Function
答案 0 :(得分:0)
在CBC mode中,在加密之前,IV与明文进行异或。
因此,使用空明文提取第一个块的IV(输出均为128位)相当于用您的密钥解密该块。
然而,你的“128位密钥”似乎是8位短,所以我无法计算IV。
我使用了以下OpenSSL参数:
echo 'MEUxILm04F/S2qSIlJKdPQ==' | \
openssl enc -d -base64 | \
openssl enc -d -aes-128-ecb -K 'B98AD080D3E30B3F91FFF50107B1E7'