zoukankan      html  css  js  c++  java
  • javascript和c#aes加密方法互解

    关键信息如下。

    javascript

    function Encrypt() {
    var key = CryptoJS.enc.Utf8.parse('8080808080808080');
    var iv = CryptoJS.enc.Utf8.parse('8080808080808080');
    var varIn = document.getElementById("txtIn").value;
    var varOut = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(varIn), key,
    {
    keySize: 128 / 8,
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    });
    document.getElementById("txtOut").value = varOut;

    }

    function decrypt() {
    var key = CryptoJS.enc.Utf8.parse('8080808080808080');
    var iv = CryptoJS.enc.Utf8.parse('8080808080808080');
    var varIn = document.getElementById("txtOut").value;
    var varOut = CryptoJS.AES.decrypt(varIn, key,
    {
    keySize: 128 / 8,
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
    }).toString(CryptoJS.enc.Utf8);
    document.getElementById("txtIn").value = varOut;

    }

    c#(AES.cs)

    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;

    namespace AESTest
    {
    public class AES
    {
    public static string DecryptStringAES(string cipherText)
    {
    var keybytes = Encoding.UTF8.GetBytes("8080808080808080");
    var iv = Encoding.UTF8.GetBytes("8080808080808080");

    var encrypted = Convert.FromBase64String(cipherText);
    var decriptedFromJavascript = DecryptStringFromBytes(encrypted, keybytes, iv);
    return string.Format(decriptedFromJavascript);
    }

    private static string DecryptStringFromBytes(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("key");
    }

    // Declare the string used to hold
    // the decrypted text.
    string plaintext = null;

    // Create an RijndaelManaged object
    // with the specified key and IV.
    using (var rijAlg = new RijndaelManaged())
    {
    //Settings
    rijAlg.Mode = CipherMode.CBC;
    rijAlg.Padding = PaddingMode.PKCS7;
    rijAlg.FeedbackSize = 128;

    rijAlg.Key = key;
    rijAlg.IV = iv;

    // Create a decrytor to perform the stream transform.
    var decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);

    try
    {
    // Create the streams used for decryption.
    using (var msDecrypt = new MemoryStream(cipherText))
    {
    using (var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
    {

    using (var srDecrypt = new StreamReader(csDecrypt))
    {
    // Read the decrypted bytes from the decrypting stream
    // and place them in a string.
    plaintext = srDecrypt.ReadToEnd();

    }

    }
    }
    }
    catch
    {
    plaintext = "keyError";
    }
    }

    return plaintext;
    }


    public static string EncryptStringAES(string cipherText)
    {
    var keybytes = Encoding.UTF8.GetBytes("8080808080808080"); //自行設定
    var iv = Encoding.UTF8.GetBytes("8080808080808080"); //自行設定
    var EncryptString = EncryptStringToBytes(cipherText, keybytes, iv);
    return Convert.ToBase64String(EncryptString);
    }

    private static byte[] EncryptStringToBytes(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("key");
    }
    byte[] encrypted;
    // Create a RijndaelManaged object
    // with the specified key and IV.
    using (var rijAlg = new RijndaelManaged())
    {
    rijAlg.Mode = CipherMode.CBC;
    rijAlg.Padding = PaddingMode.PKCS7;
    rijAlg.FeedbackSize = 128;

    rijAlg.Key = key;
    rijAlg.IV = iv;

    // Create a decrytor to perform the stream transform.
    var encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);

    // Create the streams used for encryption.
    using (var msEncrypt = new MemoryStream())
    {
    using (var csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
    {
    using (var 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;
    }
    }
    }

  • 相关阅读:
    MongoDB中级---->关联多表查询
    Java爬虫,信息抓取的实现
    Android Java汉字转拼音总结
    Android使用Activity用作弹出式对话框
    利用Theme自定义Activity间的切换动画
    ListView滑动删除 ,仿腾讯QQ
    CentOS 6.2+Nginx+Nagios,手机短信和qq邮箱提醒
    玩转Web之easyui(三)-----easy ui dataGird 重新指定url以获取不同数据源信息
    rsyslogd: error during parsing file /etc/rsyslog.conf, on or before line 55: warnings occured in fil
    升级automake和autoconf
  • 原文地址:https://www.cnblogs.com/chi0591/p/6903014.html
Copyright © 2011-2022 走看看