gpt4 book ai didi

c# - AES 加密的解密文本有额外的空格

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:52 24 4
gpt4 key购买 nike

我正在尝试从标准 SqlMembershipProvider 解密存储在数据库中的密码。为了做到这一点,我一起破解了以下控制台应用程序:

    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;
}

这确实解密了文本,但是生成的文本不是像“Password1”这样的东西,而是“\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0P\0a\0s\0s\0w\0o\0r\0d\01\0"以一堆空格的形式写入控制台,然后是 "P a s s w o r d 1"。知道我做错了什么吗?

最佳答案

我怀疑问题的部分可能是原始密码在加密之前被编码为 UTF-16,而您正在将其解码为 UTF-8。尝试更改 Decrypt 方法的最后一行:

return Encoding.Unicode.GetString(resultArray);

但这并不能解释所有那些虚假的前导零。很奇怪...

编辑...

实际上,我似乎记得 SqlMembershipProvider 在加密前用 16 字节的盐作为密码字节的前缀,在这种情况下,您可能可以通过这样的方式逃脱:

return Encoding.Unicode.GetString(resultArray, 16, resultArray.Length - 16);

但是仍然不能解释为什么这 16 个字节都是零而不是一堆随机值...

关于c# - AES 加密的解密文本有额外的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5643248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com