zoukankan      html  css  js  c++  java
  • C# 和 JS 关于 CryptoJS 的加密、解密

    1.下载个CryptoJS 我的是CryptoJS-v3.1.2 版本的

    C#的

     var a = "a[a]/e:";
                var b = "k3RA2bS97JlV5XPEueiqUA==";
                var c = EncryptByAES(a, "1234567891234567");
                var d =  DecryptByAES(c, "1234567891234567");
    

      

     // <summary>  
            /// AES解密  
            /// </summary>  
            /// <param name="input">密文字节数组</param>  
            /// <param name="key">密钥(16位)</param>  
            /// <returns>返回解密后的字符串</returns>  
            public static string DecryptByAES(string input, string key)
            {
                byte[] inputBytes = Convert.FromBase64String(input);
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 16));
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Padding = PaddingMode.PKCS7;
                    aesAlg.Mode = CipherMode.ECB;
                    aesAlg.Key = keyBytes;
                    aesAlg.IV = keyBytes;
                    ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader srEncrypt = new StreamReader(csEncrypt))
                            {
                                return srEncrypt.ReadToEnd();
                            }
                        }
                    }
                }
            }
    
    
            /// <summary>  
            /// AES加密算法  
            /// </summary>  
            /// <param name="input">明文字符串</param>  
            /// <param name="key">密钥(16位)</param>  
            /// <returns>字符串</returns>  
            public static string EncryptByAES(string input, string key)
            {
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 16));
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Padding = PaddingMode.PKCS7;
                    aesAlg.Mode = CipherMode.ECB;
                    aesAlg.Key = keyBytes;
                    aesAlg.IV = keyBytes;
                    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream())
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                        {
                            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                            {
                                swEncrypt.Write(input);
                            }
                            byte[] bytes = msEncrypt.ToArray();
                          var ddc = Convert.ToBase64String(bytes);
             
                            byte[] inputBytes = Convert.FromBase64String(ddc);
                            return ddc;
                        }
                    }
                }
            }
            /// <summary>
            /// 将指定的16进制字符串转换为byte数组
            /// </summary>
            /// <param name="s">16进制字符串(如:“7F 2C 4A”或“7F2C4A”都可以)</param>
            /// <returns>16进制字符串对应的byte数组</returns>
            public static byte[] HexStringToByteArray(string s)
            {
                s = s.Replace(" ", "");
                byte[] buffer = new byte[s.Length / 2];
                for (int i = 0; i < s.Length; i += 2)
                    buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
                return buffer;
            }
    
            /// <summary>
            /// 将一个byte数组转换成一个格式化的16进制字符串
            /// </summary>
            /// <param name="data">byte数组</param>
            /// <returns>格式化的16进制字符串</returns>
            public static string ByteArrayToHexString(byte[] data)
            {
                StringBuilder sb = new StringBuilder(data.Length * 3);
                foreach (byte b in data)
                {
                    //16进制数字
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
                    //16进制数字之间以空格隔开
                    //sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
                }
                return sb.ToString().ToUpper();
            }
    

      

    JS的

    <script src="~/Content/select/js/jquery-1.11.3.min.js"></script>
    <script src="~/Content/CryptoJS-v3.1.2/rollups/aes.js"></script>
    <script src="~/Content/CryptoJS-v3.1.2/components/mode-ecb-min.js"></script>
    <script src="~/Content/CryptoJS-v3.1.2/components/pad-zeropadding.js"></script>
    

      

     var a = "k3RA2bS97JlV5XPEueiqUA==";
        var b = 'a[a]/e:';
        var c = Encrypt2(b).toString();
        var d = Encrypt3(b);
        var e = Decrypt2(a);
        var f = Decrypt3(a);
    

      

    function Encrypt2(text) {
            var key = CryptoJS.enc.Utf8.parse('1234567891234567');
            var iv = CryptoJS.enc.Latin1.parse('1234567891234567');
            var b = CryptoJS.AES.encrypt(a, key, {
                iv: iv,
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            return b
        }
    
        function Encrypt3(text) {
            var key = CryptoJS.enc.Utf8.parse("1234567891234567");
            var InDkn4 = CryptoJS.enc.Utf8.parse(text);
            var b = CryptoJS.AES.encrypt(InDkn4, key, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            return b["toString"]()
        }
    
        function Decrypt2(text) {
            var key = CryptoJS["enc"]["Utf8"]["parse"]("1234567891234567");
            var b = CryptoJS["AES"]["decrypt"](text, s3, {
                mode: CryptoJS["mode"]["ECB"],
                padding: CryptoJS["pad"]["Pkcs7"]
            });
           // var t = CryptoJS["enc"]["Utf8"]["stringify"](b);
            return CryptoJS["enc"]["Utf8"]["stringify"](b)["toString"]()
        }
    
        function Decrypt3(text) {
            var key = CryptoJS.enc.Utf8.parse("1234567891234567");
            var kIlnQ10 = CryptoJS.AES.decrypt(text, key, {
                mode: CryptoJS.mode.ECB,
                padding: CryptoJS.pad.Pkcs7
            });
            var t = CryptoJS.enc.Utf8.stringify(kIlnQ10);
            return t
        }
    

      

  • 相关阅读:
    Python基础语法精讲
    使用xlwt 库将数据导入为Excel 表格
    统计指定目录下所有mp4文件的时长(包含子目录下的文件)
    获取一个目录下所有文件(完整路径,要借助os.path.join()方法)
    中国参与MOOC 建设的大学有多少所?
    蒙特卡洛方法应用
    手欠,起了一卦,看那房子的风水,悲剧了
    好无聊,大半夜地找了份传世服务端源码,编着玩
    昨晚房屋的风水
    上午,写了个小东西
  • 原文地址:https://www.cnblogs.com/xuanlanbinfen/p/13100751.html
Copyright © 2011-2022 走看看