重现意外结果的步骤:
HappyCoding
加密文本yecpPqAJ+PnBMtggWVz42WME3TjhG313OhvBuUJOFtc=
作为关键字,并在下拉列表中选择256-Bit
选项。结果我收到了Lox/sfjNyXOzP9ZE8Fjj9REcuB+iJ1EXXuNjf2du29c=
。然后我在代码中通过Decrypt函数运行它:
var testAesString = "Lox/sfjNyXOzP9ZE8Fjj9REcuB+iJ1EXXuNjf2du29c=";
var decryptedString = Decrypt(testAesString, key);
并接收"�ГYC���{R\u0017V��@\u0013�NH�$�|�\u001a)˪n�mp"
而不是“HappyCoding”
Decrypt功能的代码如下:
private static string Decrypt(string stringCypher_Text, string stringKey)
{
Byte[] Key = Convert.FromBase64String(stringKey);
Byte[] Cypher_Text = Convert.FromBase64String(stringCypher_Text);
RijndaelManaged Crypto = null;
MemoryStream MemStream = null;
ICryptoTransform Decryptor = null;
CryptoStream Crypto_Stream = null;
StreamReader Stream_Read = null;
string Plain_Text;
try
{
Crypto = new RijndaelManaged();
Crypto.Padding = PaddingMode.Zeros;
Crypto.Key = Key;
Crypto.BlockSize = 256;
Crypto.Mode = CipherMode.ECB;
Crypto.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
Decryptor = Crypto.CreateDecryptor(Crypto.Key, Crypto.IV);
MemStream = new MemoryStream(Cypher_Text);
Crypto_Stream = new CryptoStream(MemStream, Decryptor, CryptoStreamMode.Read);
Stream_Read = new StreamReader(Crypto_Stream);
Plain_Text = Stream_Read.ReadToEnd();
}
finally
{
if (Crypto != null)
Crypto.Clear();
MemStream.Flush();
MemStream.Close();
}
return Plain_Text;
}
我没有收到任何错误。我收到了意想不到的结果。我不知道如何进一步测试它。我的想法可能是我用来接收加密值的网站首先使用不同的设置等。
赞赏如何测试和/或解决的任何方向。
答案 0 :(得分:2)
更多地使用它并获得以下工作。该网站似乎只抓取您用作密钥的任何字符串的前32个字节。
public class MainClass<T>{
UtilityClass utility;
public MainClass(){
utility = new InjectorHelper().getHelper();
}
...
public static class InjectorHelper{
@Inject
UtilityClass utilityClass;
public InjectorHelper(){
Injector.getInstance().getAppComponent().inject(this);
}
public UtilityClass getUtilityClass(){
return utilityClass
}
}
}
答案 1 :(得分:0)
因为密文是两个块,但是纯文本少于一个块,我猜第一个块是IV。
尝试使用密文的前16个字节作为CBC模式的IV,并解密接下来的16个字节。