国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

C#與java中的AES加解密互解算法

2019-11-17 02:28:49
字體:
供稿:網(wǎng)友

C#與java中的AES加解密互解算法

一、C#版AES加解密算法

   public class AESCode     {        public string Key { get; set; }        public string Encrypt(string val)        {            if (string.IsNullOrEmpty(val))                return null;#if CSP            using (AesCryptoServicePRovider des = new AesCryptoServiceProvider())#else            using (AesManaged des = new AesManaged())#endif            {                byte[] inputByteArray = Encoding.UTF8.GetBytes(val);                byte[] _key;                byte[] _iv;                GeneralKeyIV(this.Key, out _key, out _iv);                des.Key = _key;                des.IV = _iv;                using (MemoryStream ms = new MemoryStream())                {                    using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))                    {                        cs.Write(inputByteArray, 0, inputByteArray.Length);                        cs.FlushFinalBlock();                        byte[] bytes = (byte[])ms.ToArray();                        return Convert.ToBase64String(bytes);                    }                }            }        }        public string Decrypt(string val)        {            if (string.IsNullOrEmpty(val))                return null;#if CSP            using (AesCryptoServiceProvider des = new AesCryptoServiceProvider())#else            using (AesManaged des = new AesManaged())#endif            {                byte[] inputByteArray = Convert.FromBase64String(val);                byte[] _key;                byte[] _iv;                GeneralKeyIV(this.Key, out _key, out _iv);                des.Key = _key;                des.IV = _iv;                using (MemoryStream ms = new MemoryStream())                {                    using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))                    {                        cs.Write(inputByteArray, 0, inputByteArray.Length);                        cs.FlushFinalBlock();                        return Encoding.UTF8.GetString(ms.ToArray());                    }                }            }        }        public void GeneralKeyIV(string keyStr, out byte[] key, out byte[] iv)        {            byte[] bytes = Encoding.UTF8.GetBytes(keyStr);            key = SHA256Managed.Create().ComputeHash(bytes);            iv = md5.Create().ComputeHash(bytes);        }}

二、Java版算法

import java.security.MessageDigest;import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;public class AESCode {/**     * 提供密鑰和向量進(jìn)行加密     *      * @param sSrc     * @param key     * @param iv     * @return     * @throws Exception     */    public static String Encrypt(String sSrc, byte[] key, byte[] iv) throws Exception {        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/補(bǔ)碼方式"        IvParameterSpec _iv = new IvParameterSpec(iv);// 使用CBC模式,需要一個向量iv,可增加加密算法的強(qiáng)度        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv);        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));        return Base64.encodeBase64String(encrypted);    }    /**     * 提供密鑰和向量進(jìn)行解密     *      * @param sSrc     * @param key     * @param iv     * @return     * @throws Exception     */    public static String Decrypt(String sSrc, byte[] key, byte[] iv) throws Exception {        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        IvParameterSpec _iv = new IvParameterSpec(iv);        cipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv);        byte[] encrypted = Base64.decodeBase64(sSrc);        byte[] original = cipher.doFinal(encrypted);        return new String(original, "utf-8");    }    /**     * 使用密鑰進(jìn)行加密     *      * @param sSrc     * @param keyStr     * @return     * @throws Exception     */    public static String Encrypt(String sSrc, String keyStr) throws Exception {        byte[] key = GeneralKey(keyStr);        byte[] iv = GeneralIv(keyStr);        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// "算法/模式/補(bǔ)碼方式"        IvParameterSpec _iv = new IvParameterSpec(iv);        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, _iv);        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));        return Base64.encodeBase64String(encrypted);    }    /**     * 使用密鑰進(jìn)行解密     *      * @param sSrc     * @param keyStr     * @return     * @throws Exception     */    public static String Decrypt(String sSrc, String keyStr) throws Exception {        byte[] key = GeneralKey(keyStr);        byte[] iv = GeneralIv(keyStr);        SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");        IvParameterSpec _iv = new IvParameterSpec(iv);        cipher.init(Cipher.DECRYPT_MODE, skeySpec, _iv);        byte[] encrypted = Base64.decodeBase64(sSrc);// 先用base64解碼        byte[] original = cipher.doFinal(encrypted);        return new String(original, "utf-8");    }    /**     * 構(gòu)建密鑰字節(jié)碼     *      * @param keyStr     * @return     * @throws Exception     */    private static byte[] GeneralKey(String keyStr) throws Exception {        byte[] bytes = keyStr.getBytes("utf-8");        MessageDigest md = MessageDigest.getInstance("SHA-256");        md.update(bytes);        return md.digest();    }    /**     * 構(gòu)建加解密向量字節(jié)碼     *      * @param keyStr     * @return     * @throws Exception     */    private static byte[] GeneralIv(String keyStr) throws Exception {        byte[] bytes = keyStr.getBytes("utf-8");        MessageDigest md = MessageDigest.getInstance("MD5");        md.update(bytes);        return md.digest();    }}

java版需要commons-codec-1.10.jar,local_policy.jar,US_export_policy.jar


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 荆门市| 府谷县| 长海县| 耒阳市| 永春县| 周至县| 上饶市| 安顺市| 夹江县| 夏河县| 太仆寺旗| 丰台区| 嘉黎县| 祁连县| 汶上县| 潍坊市| 河曲县| 深圳市| 阿巴嘎旗| 扶沟县| 永川市| 曲水县| 临猗县| 方山县| 仪征市| 康平县| 东港市| 尉犁县| 改则县| 百色市| 河源市| 永康市| 桑植县| 大安市| 元谋县| 霍州市| 砚山县| 西乌珠穆沁旗| 兖州市| 昆明市| 墨玉县|