【发布时间】:2016-11-04 06:57:38
【问题描述】:
首先,我意识到还有许多其他帖子可以回答这个问题,我已经阅读并尝试了所有帖子。我似乎仍然无法解决这个问题,所以我正在寻求比我更了解加密货币的人的帮助。
其次,我要分享的代码是遗留代码,因为我不是加密专家,所以仍然不是 100% 清楚一切的含义。可能部分或全部代码完全是垃圾,应该废弃;但是,有很多其他系统已经在使用它,并且已经存储了经过此代码的加密值。在这一点上,改变加密算法之类的东西并不完全是一种选择。话虽如此,私有方法是遗留代码以及测试值(即加密密钥)都是无法更改的东西。这两个公共静态方法是新的,可能会导致问题,但我似乎无法弄清楚。
开启代码......
class Program
{
public static string Encrypt(string key, string toEncrypt)
{
var keyArray = Convert.FromBase64String(key);
var info = Encoding.ASCII.GetBytes(toEncrypt);
var encrypted = Encrypt(keyArray, info);
return Encoding.ASCII.GetString(encrypted);
}
public static string Decrypt(string key, string cipherString)
{
var keyArray = Convert.FromBase64String(key);
var cipherText = Encoding.ASCII.GetBytes(cipherString);
var decrypted = Decrypt(keyArray, cipherText);
return Encoding.ASCII.GetString(decrypted);
}
private static byte[] Encrypt(byte[] key, byte[] info)
{
using (var cipher = Aes.Create())
{
cipher.Key = key;
cipher.Mode = CipherMode.CBC;
cipher.Padding = PaddingMode.ISO10126;
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, cipher.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(info, 0, info.Length);
}
var ciphertext = ms.ToArray();
var message = new byte[cipher.IV.Length + ciphertext.Length];
cipher.IV.CopyTo(message, 0);
ciphertext.CopyTo(message, cipher.IV.Length);
return message;
}
}
}
private static byte[] Decrypt(byte[] key, byte[] ciphertext)
{
using (var cipher = Aes.Create())
{
cipher.Key = key;
cipher.Mode = CipherMode.CBC;
cipher.Padding = PaddingMode.ISO10126;
var ivSize = cipher.IV.Length;
var iv = new byte[ivSize];
Array.Copy(ciphertext, iv, ivSize);
cipher.IV = iv;
var data = new byte[ciphertext.Length - ivSize];
Array.Copy(ciphertext, ivSize, data, 0, data.Length);
using (var ms = new MemoryStream())
{
using (var cs = new CryptoStream(ms, cipher.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(data, 0, data.Length);
}
return ms.ToArray();
}
}
}
static void Main(string[] args)
{
var newEncryptionKey = Guid.NewGuid().ToString().Replace("-", string.Empty);
var encryptedValue = Encrypt(newEncryptionKey, "test");
Console.WriteLine($"New encrypted value: {encryptedValue}");
var decryptedValue = Decrypt(newEncryptionKey, encryptedValue);
Console.WriteLine($"New decrypted value: {decryptedValue}");
}
}
原来如此。基本上,我正在尝试使用“test”的测试字符串并使用 GUID 作为密钥对其进行加密。同样,我没有选择此密钥,并且已经使用 GUID 作为密钥的加密值,因此如果可能的话,我无法更改它。加密工作正常,但是当我去解密时,我得到了这个问题标题中提到的异常。
任何帮助将不胜感激。
【问题讨论】:
标签: c# encryption