相当于 Delphi 中的 C# 加密/解密代码

本文关键字:解密 代码 加密 Delphi 中的 相当于 | 更新日期: 2023-09-27 18:32:23

我有这个 C# 代码来加密/解密字符串:

private static byte[] EncryptString(byte[] clearText, byte[] Key, byte[] IV)
{
    MemoryStream ms = new MemoryStream();
    Rijndael alg = Rijndael.Create();
    alg.Key = Key;
    alg.IV = IV;
    CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
    cs.Write(clearText, 0, clearText.Length);
    cs.Close();
    byte[] encryptedData = ms.ToArray();
    return encryptedData;
}
public static string EncryptString(string clearText, string Password)
{
    byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
    PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x74, 0x68, 0x69, 0x73, 0x69, 0x61, 0x74, 0x65, 0x73, 0x74 });
    byte[] encryptedData = EncryptString(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
    return Convert.ToBase64String(encryptedData);
}
private static byte[] DecryptString(byte[] cipherData, byte[] Key, byte[] IV)
{
    MemoryStream ms = new MemoryStream();
    Rijndael alg = Rijndael.Create();
    alg.Key = Key;
    alg.IV = IV;
    CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
    cs.Write(cipherData, 0, cipherData.Length);
    cs.Close();
    byte[] decryptedData = ms.ToArray();
    return decryptedData;
}
public static string DecryptString(string cipherText, string Password)
{
    if (!string.IsNullOrEmpty(cipherText))
    {
        byte[] cipherBytes = Convert.FromBase64String(cipherText);
        PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x74, 0x68, 0x69, 0x73, 0x69, 0x61, 0x74, 0x65, 0x73, 0x74 });
        byte[] decryptedData = DecryptString(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
        return System.Text.Encoding.Unicode.GetString(decryptedData);
    }
    else
    {
        return "";
    }
}

加密字符串应本地存储在注册表或文件中。Delphi 应用程序也必须有权访问此字符串。请注意,由于某种原因,无法将加密/解密代码外包给 DLL。

我的问题是我无法在Delphi中生成"PasswordDerivedBytes"。有人可以给我一个提示,这是如何工作的吗?

相当于 Delphi 中的 C# 加密/解密代码

我建议你使用Delphi Encryption Compedium。它几乎有你需要加密的任何东西,并有一些例子,这些例子大多是你想做的事情。