第一次在这里发海报。这里很棒的社区。经过无数小时的搜索,我无法弄清楚我面临的这个问题的答案。
首先,在加密/解密、密码学等方面,我不是大师。我只想在这个领域走这么远,而不会迷路。我编码的主要框架是 .NET,我被要求为 C# 创建一个 AES CBC 实现,它可以在 JavaScript 和 ActionScript 3 上运行。我在这两个方面都取得了成功,但在使用 JavaScript 时,我遇到了一个问题。
我决定使用 SlowAES AES 实现,因为它似乎是最流行的最好的互操作。
有关我的问题,请参阅以下链接...
问题 #9:http ://code.google.com/p/slowaes/issues/detail?id=9
基本上我对 SlowAES 的问题是,在不知道原始未加密文本的长度的情况下,我无法正确解密某些内容。这违背了目的对吗?我应该能够在不需要知道原始字符串的情况下解密加密字符串。
如果我遗漏了什么,如果指出正确的方向,我将不胜感激。谢天谢地,我没事,因为我放在一起的 .NET AES 实现可以解密 SlowAES 加密的内容,与 ActionScript 3 的实现相同。
在这一点上,我只想让 SlowAES 正确解密。
更新
在 Remus 的帮助下,我确定 SlowAES 正在使用 PKCS5/7 填充方案,但没有正确删除它。现在我的问题似乎与 C#、理解字节数组等有关。
我可以看到解密文本中的最后一个字符是“5”,前面有一个“0”。这种模式持续了 5 次。现在根据 Remus 下面所说的,我应该用这个数字减去解密的字符串长度。但是模式是“05”,这是否意味着我将 5 加倍为 10,然后从解密的字符串长度中减去 10?
另外,获得我需要减去的数字的最简单方法是什么?我正在使用以下内容来获取当前的号码:
Byte[] decryptedBytes = System.Text.Encoding.ASCII.GetBytes(decrypted);
Byte padLengthByte = decryptedBytes[decryptedBytes.Length - 1];
Char padLengthChar = Convert.ToChar(padLengthByte);
String padLengthString = padLengthChar.ToString();
Int32 padLength = Int32.Parse(padLengthString);
我确定我做错了。再次感谢任何帮助。
我的另一个问题是,您如何知道是否首先应用了填充以将其删除?如果'\07'代表7个字节的填充,如果最后一个字节是'\01\'呢?