我们正在尝试与使用RijndaelManaged进行对称加密的传统c#应用程序集成。但是看起来他们使用了13字节的字符串作为加密密钥!
代码基本上是:
var initVectorBytes = Encoding.ASCII.GetBytes("16-char string");
var keyBytes = Encoding.ASCII.GetBytes("13-char string");
var symmetricKey = new RijndaelManaged { Mode = CipherMode.CBC };
var decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes);
var memoryStream = new System.IO.MemoryStream(encryptedbytes);
var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read);
....
从理论上讲,这不应该起作用 - docs明确说出"密钥大小必须是128,192或256位"当我们尝试这个时(在Xamarin / Mono编译器上 - 目前不能轻易访问.net)它会引发异常。
但它显然适用于遗留系统,并且它们具有单元测试,也可以使用13字节密钥调用CreateDecryptor;所以可能是一个真正的.net系统以某种方式对这段代码做了些什么。 (我注意到.net版本2.0的文档不讨论密钥长度限制 - 代码是使用.net 3.5编译的)
它是否可能使用带有104字节密钥和块大小的Rijndael算法?或者它会以某种方式填充钥匙或什么?