簡體   English   中英

AES在T-SQL中的c#decrypt中加密

[英]AES encrypt in c# decrypt in T-SQL

我編寫了以下代碼來解密一些敏感數據,在大多數情況下我需要使用T-SQL查詢數據,我無法解密由此代碼加密的數據。 所以我的問題是如何在T-SQL中編寫一個函數,其工作方式與在C#中工作的方式相同,我將在存儲過程中使用它。

提前致謝

加密功能:

public static string Encrypt(string text)
    {
        if (string.IsNullOrEmpty(EncryptionKey))
            return string.Empty;
        if (string.IsNullOrEmpty(text))
            return string.Empty;
        var clearBytes = Encoding.Unicode.GetBytes(text);
        using (var encryptor = Aes.Create())
        {
            var pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[]
            {
                0x49,
                0x76,
                0x61,
                0x6e,
                0x20,
                0x4d,
                0x65,
                0x64,
                0x76,
                0x65,
                0x64,
                0x65,
                0x76
            });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(clearBytes, 0, clearBytes.Length);
                }
                text = Convert.ToBase64String(ms.ToArray());
            }
        }
        return text;
    }

解密功能:

public static string Decrypt(string text)
    {
        if (string.IsNullOrEmpty(EncryptionKey))
            return string.Empty;
        if (string.IsNullOrEmpty(text))
            return string.Empty;
        var cipherBytes = Convert.FromBase64String(text);
        using (var encryptor = Aes.Create())
        {
            var pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[]
            {
                0x49,
                0x76,
                0x61,
                0x6e,
                0x20,
                0x4d,
                0x65,
                0x64,
                0x76,
                0x65,
                0x64,
                0x65,
                0x76
            });
            encryptor.Key = pdb.GetBytes(32);
            encryptor.IV = pdb.GetBytes(16);
            using (var ms = new MemoryStream())
            {
                using (var cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                {
                    cs.Write(cipherBytes, 0, cipherBytes.Length);
                }
                text = Encoding.Unicode.GetString(ms.ToArray());
            }
        }
        return text;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM