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日

悬赏问题

  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 qgcomp混合物线性模型分析的代码出现错误:Model aliasing occurred
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'