【发布时间】:2018-01-04 05:58:12
【问题描述】:
我想知道如何在 C# 中正确加密,Laravel (PHP) 可以用它的加密解密?
这是我的 C# 加密:
private static readonly Encoding encoding = Encoding.UTF8;
public static void Main(string[] args)
{
string key = "ysWZKXsnB1aS38Qzj5cza01wd3wT1234";
string text = "Here is some data to encrypt!";
string encrypted = encrypt(text, key);
// Display the original data and the encrypted data.
Console.WriteLine("Original: {0}", text);
Console.WriteLine("Key: {0}", key);
Console.WriteLine("Encrypted: {0}", encrypted);
}
private static string encrypt(string plainText, string key)
{
RijndaelManaged aes = new RijndaelManaged();
aes.KeySize = 256;
aes.BlockSize = 128;
aes.Padding = PaddingMode.PKCS7;
aes.Mode = CipherMode.CBC;
aes.Key = encoding.GetBytes(key);
aes.GenerateIV();
ICryptoTransform AESEncrypt = aes.CreateEncryptor(aes.Key, aes.IV);
byte[] buffer = Encoding.ASCII.GetBytes(phpSerialize(plainText));
String encryptedText = Convert.ToBase64String(Encoding.Default.GetBytes(Encoding.Default.GetString(AESEncrypt.TransformFinalBlock(buffer, 0, buffer.Length))));
String mac = "";
mac = BitConverter.ToString(hmacSHA256(Convert.ToBase64String(aes.IV) + encryptedText, key)).Replace("-", "").ToLower();
var keyValues = new Dictionary<string, object>
{
{ "iv", Convert.ToBase64String(aes.IV) },
{ "value", encryptedText },
{ "mac", mac },
};
JavaScriptSerializer serializer = new JavaScriptSerializer();
return Convert.ToBase64String(Encoding.ASCII.GetBytes(serializer.Serialize(keyValues)));
}
代码加密成功,但 Laravel 返回“无法解密数据”。尝试解密此处的代码输出时。
【问题讨论】:
-
这个问题和答案对你来说足够了吗?因为在 Laravel 文档中指定它使用该加密。
-
共享链接用于解密来自 Laravel 的加密字符串。我想知道的是如何通过 C# 以正确的方式加密,以便 Laravel 也可以解密它。
-
为我的问题发布了一个有效的答案。我希望你们也觉得它有帮助!感谢您的反馈! gist.github.com/doncadavona/19bf1423daf2790276dc0a823cd8c579
标签: c# php laravel security encryption