来自AES加密的解密文本有额外的空间
我试图解密从标准的SqlMembershipProvider存储在数据库中的密码。为了做到这一点,我砍死在一起以下控制台应用程序:来自AES加密的解密文本有额外的空间
static void Main(string[] args)
{
const string encryptedPassword = @"wGZmgyql4prPIr7t1uaxa+RBRJC51qOPBO5ZkSskUtUCY1aBpqNifQGknEfWzky4";
const string iv = @"Jc0RhfDog8SKvtF9aI+Zmw==";
var password = Decrypt(encryptedPassword, iv);
Console.WriteLine(password);
Console.ReadKey();
}
public static string Decrypt(string toDecrypt, string iv)
{
var ivBytes = Convert.FromBase64String(iv);
const string decryptKey = "DECRYPTION_KEY_HERE";
var keyArray = StringToByteArray(decryptKey);
var toEncryptArray = Convert.FromBase64String(toDecrypt);
var rDel = new AesCryptoServiceProvider() { Key = keyArray, IV = ivBytes};
var cTransform = rDel.CreateDecryptor();
var resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
public static byte[] StringToByteArray(String hex)
{
var numberChars = hex.Length;
var bytes = new byte[numberChars/2];
for (var i = 0; i < numberChars; i += 2)
bytes[i/2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
这确实解密文本,但是,而不是生成的文本是类似于“密码1”,它是“\ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0P \ 0a \ 0s \ 0s \ 0w \ 0o \ 0r \ 0d \ 01 \ 0“写入控制台作为一堆空格,然后是“密码1”。任何想法我做错了什么?
我怀疑部分的问题可能是原始密码在加密前被编码为UTF-16,并且您将其解码为UTF-8。试着改变你的Decrypt
方法的最后一行:
return Encoding.Unicode.GetString(resultArray);
这可能没有什么解释所有这些虚假的前导零。很奇怪...
编辑...
其实,我似乎记得SqlMembershipProvider
前缀与加密前16个字节的盐,你可能会能够在这种情况下,密码字节摆脱这样的:
return Encoding.Unicode.GetString(resultArray, 16, resultArray.Length - 16);
但是,这仍然没有解释为什么这16个字节都是零,而不是一堆随机值...
你是对的!这删除了密码中的空格,但不是主要的空格。 – 2011-04-13 01:53:10
因此,在数据库中有一个盐字段,当我解密它时,它需要作为“iv”的输入。你可能是对的,我可以简单地做你的建议,我会用密码开始测试它,等等,以确保。 – 2011-04-13 02:32:58
解密密码?咦?它们应该存储为单向散列,对吧? – 2011-04-13 00:48:13
我看到一个'iv',但没有[操作模式](http://en.wikipedia.org/wiki/Modes_of_operation)或[填充](http://en.wikipedia.org/wiki/Padding_(cryptography) )) - 也许密码被加密到数据库中,使用不同的加密或填充模式,而不是你用来解密的密码? (操作方式似乎不太可能,因为你确实得到了一些有意义的数据,但是仍然可以找到加密程序做了什么,并将其准确反向。:) – sarnold 2011-04-13 00:57:43
@Mitch小麦,这些来自遗留系统,我遗传。我正在对它们进行解密,以便我可以使用salted hash来恢复它们。 – 2011-04-13 01:01:41