如果知道密钥,纯文本,并且有点确定算法,则解密密文

时间:2011-03-22 00:35:36

标签: aes encryption

说我知道:

a)一些纯文本使用以下128位密钥加密: 7,185,138,208,128,211,227,11,63,145,255,245,1,7,17​​7,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

1 个答案:

答案 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'