jetix 2023-04-18 11:10 采纳率: 50%
浏览 60
已结题

Js的Aes加密如何转换为C#代码

Js的Aes加密如何转换为C#代码?

img

我这里用了下面代码,可是结果却不一样:

public static string AESEncryptedString(this string encrypteStr,
            string key) {
            byte[] aesBytes = Encoding.UTF8.GetBytes(encrypteStr);
            byte[] aesKey = Encoding.UTF8.GetBytes(key);
          
            using MemoryStream memoryStream = new();
            Rijndael Aes = Rijndael.Create();
           
            Aes.Mode = CipherMode.ECB;
            Aes.Padding = PaddingMode.PKCS7;
            Aes.KeySize = 128;
            Aes.Key = aesKey;
            using CryptoStream cryptoStream = new(memoryStream,
                Aes.CreateEncryptor(), CryptoStreamMode.Write);
            cryptoStream.Write(aesBytes, 0, aesBytes.Length);
            cryptoStream.FlushFinalBlock();
            Aes.Clear();
            //return Convert.ToBase64String(memoryStream.ToArray());
            return Convert.ToHexString(memoryStream.ToArray());
           
        }
请高手帮帮!!!

  • 写回答

3条回答 默认 最新

  • 喝茶品人生 2023-04-18 13:18
    关注

    使用.NET框架中的System.Security.Cryptography命名空间中的AesManaged类来实现,下面这个是我以前写过的可以参考:

    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    
    class AesExample
    {
        static void Main()
        {
            string plainText = "Hello, world!";
            byte[] key = new byte[32];
            byte[] iv = new byte[16];
    
            // Generate a random key and IV
            using (AesManaged aes = new AesManaged())
            {
                aes.GenerateKey();
                aes.GenerateIV();
                key = aes.Key;
                iv = aes.IV;
            }
    
            // Encrypt the string using the key and IV
            byte[] encrypted = EncryptStringToBytes_Aes(plainText, key, iv);
    
            // Decrypt the encrypted string using the key and IV
            string decrypted = DecryptStringFromBytes_Aes(encrypted, key, iv);
    
            // Display the original data and the decrypted data
            Console.WriteLine("Original:   {0}", plainText);
            Console.WriteLine("Encrypted:  {0}", Convert.ToBase64String(encrypted));
            Console.WriteLine("Decrypted:  {0}", decrypted);
        }
    
        static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv)
        {
            // Check arguments.
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (key == null || key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (iv == null || iv.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;
    
            // Create an AesManaged object
            // with the specified key and IV.
            using (AesManaged aes = new AesManaged())
            {
                aes.Key = key;
                aes.IV = iv;
    
                // Create an encryptor to perform the stream transform.
                ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
    
                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {
                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }
    
            // Return the encrypted bytes from the memory stream.
            return encrypted;
        }
    
        static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv)
        {
            // Check arguments.
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (key == null || key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (iv == null || iv.Length <= 0)
                throw new ArgumentNullException("IV");
    
            // Declare the string used to hold
            // the decrypted text.
            string plaintext = null;
    
            // Create an AesManaged object
            // with the specified key and IV.
            using (AesManaged aes = new AesManaged())
            {
                aes.Key = key;
                aes.IV = iv;
    
                // Create a decryptor to perform the stream transform.
                ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
    
                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {
    
                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }
    
            }
    
            return plaintext;
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月27日
  • 已采纳回答 4月19日
  • 创建了问题 4月18日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改