簡體   English   中英

如何在c#中使用AES 128位加密字符串?

[英]how to encrypt string using AES 128 bit in c#?

我正在使用 oracle Database12c 在 asp.net 中處理 webapplication 我使用 aes128 存儲過程來加密密碼這里是進行加密的過程

DECLARE
   l_user_id    test.username%TYPE := 'SCOTT';
   l_user_psw   VARCHAR2 (2000) := 'mypassword123';

   l_key        VARCHAR2 (2000) := '1234567890999999';
   l_mod NUMBER
         :=   DBMS_CRYPTO.ENCRYPT_AES128
            + DBMS_CRYPTO.CHAIN_CBC
            + DBMS_CRYPTO.PAD_PKCS5;
   l_enc        RAW (2000);
BEGIN
   l_user_psw :=
      DBMS_CRYPTO.encrypt (UTL_I18N.string_to_raw (l_user_psw, 'AR8MSWIN1256'),
                           l_mod,
                           UTL_I18N.string_to_raw (l_key, 'AR8MSWIN1256'));
   
      DBMS_OUTPUT.put_line ('Encrypted=' || l_user_psw);

   INSERT INTO test VALUES (l_user_id, l_user_psw);
dbms_output.put_line('done');
   COMMIT;
END;
/

最終結果是

132BEDB1C2CDD8F23B5A619412C27B60

現在我想在 c# 中創建相同的 Aes 我知道我可以從 c# 調用存儲過程並獲得相同的結果,但出於安全原因我想使用 c# 來實現我已經嘗試了很多方法,但最終得到了不同的結果! 我需要幫助請!

由於我感覺很慷慨,我會為您提供一個解決方案:

public static string EncryptPassword(string key, string password)
{
    // Your current code uses WIN1256 encoding for converting
    // your strings to bytes, so we'll use that here
    var encoding = System.Text.Encoding.GetEncoding(1256);
    byte[] passwordBytes = encoding.GetBytes(password);
    byte[] keyBytes = encoding.GetBytes(key);

    using (var aes = AesManaged.Create())
    {
        // Set up the algorithm
        aes.Padding = PaddingMode.PKCS7;
        aes.Mode = CipherMode.CBC;
        aes.Key = keyBytes;
        aes.BlockSize = 128; // AES-128
        // You don't specify an IV in your procedure, so we
        // need to zero it
        aes.IV = new byte[16];

        // Create a memorystream to store the result
        using (var ms = new MemoryStream())
        {
            // create an encryptor transform, and wrap the memorystream in a cryptostream
            using (var transform = aes.CreateEncryptor())
            using (var cs = new CryptoStream(ms, transform, CryptoStreamMode.Write))
            {
                // write the password bytes
                cs.Write(passwordBytes, 0, passwordBytes.Length);
            }
            
            // get the encrypted bytes and format it as a hex string and then return it
            return BitConverter.ToString(ms.ToArray()).Replace("-", string.Empty);
        }
    }
}

網上試試

暫無
暫無

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

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