亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android和.NET通用的AES算法

2019-11-11 06:29:02
字體:
來源:轉載
供稿:網友

原文引自 http://www.cnblogs.com/ahui/archive/2011/04/22/2025045.html

1.NET源代碼:

using System;using System.Text;using System.Security.Cryptography; namespace ConsoleapplicationDemo{    /// <summary>    /// AES對稱加密解密類    /// </summary>    public class AESHelper    {        #region 成員變量        /// <summary>        /// 密鑰(32位,不足在后面補0)        /// </summary>        PRivate const string _passwd = "ihlih*0037JOHT*)(PIJY*(()JI^)IO%";        /// <summary>        /// 運算模式        /// </summary>        private static CipherMode _cipherMode = CipherMode.ECB;        /// <summary>        /// 填充模式        /// </summary>        private static PaddingMode _paddingMode = PaddingMode.PKCS7;        /// <summary>        /// 字符串采用的編碼        /// </summary>        private static Encoding _encoding = Encoding.UTF8;        #endregion         #region 輔助方法        /// <summary>        /// 獲取32byte密鑰數據        /// </summary>        /// <param name="passWord">密碼</param>        /// <returns></returns>        private static byte[] GetKeyArray(string password)        {            if (password == null)            {                password = string.Empty;            }             if (password.Length < 32)            {                password = password.PadRight(32, '0');            }            else if (password.Length > 32)            {                password = password.Substring(0, 32);            }             return _encoding.GetBytes(password);        }         /// <summary>        /// 將字符數組轉換成字符串        /// </summary>        /// <param name="inputData"></param>        /// <returns></returns>        private static string ConvertByteToString(byte[] inputData)        {            StringBuilder sb = new StringBuilder(inputData.Length * 2);            foreach (var b in inputData)            {                sb.Append(b.ToString("X2"));            }            return sb.ToString();        }         /// <summary>        /// 將字符串轉換成字符數組        /// </summary>        /// <param name="inputString"></param>        /// <returns></returns>        private static byte[] ConvertStringToByte(string inputString)        {            if (inputString == null || inputString.Length < 2)            {                throw new ArgumentException();            }            int l = inputString.Length / 2;            byte[] result = new byte[l];            for (int i = 0; i < l; ++i)            {                result[i] = Convert.ToByte(inputString.Substring(2 * i, 2), 16);            }             return result;        }        #endregion         #region 加密        /// <summary>        /// 加密字節數據        /// </summary>        /// <param name="inputData">要加密的字節數據</param>        /// <param name="password">密碼</param>        /// <returns></returns>        public static byte[] Encrypt(byte[] inputData, string password)        {            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();            aes.Key = GetKeyArray(password);            aes.Mode = _cipherMode;            aes.Padding = _paddingMode;            ICryptoTransform transform = aes.CreateEncryptor();            byte[] data = transform.TransformFinalBlock(inputData, 0, inputData.Length);            aes.Clear();            return data;        }         /// <summary>        /// 加密字符串(加密為16進制字符串)        /// </summary>        /// <param name="inputString">要加密的字符串</param>        /// <param name="password">密碼</param>        /// <returns></returns>        public static string Encrypt(string inputString,string password)        {            byte[] toEncryptArray = _encoding.GetBytes(inputString);            byte[] result = Encrypt(toEncryptArray, password);            return ConvertByteToString(result);        }         /// <summary>        /// 字符串加密(加密為16進制字符串)        /// </summary>        /// <param name="inputString">需要加密的字符串</param>        /// <returns>加密后的字符串</returns>        public static string EncryptString(string inputString)        {            return Encrypt(inputString, _passwd);        }        #endregion         #region 解密        /// <summary>        /// 解密字節數組        /// </summary>        /// <param name="inputData">要解密的字節數據</param>        /// <param name="password">密碼</param>        /// <returns></returns>        public static byte[] Decrypt(byte[] inputData, string password)        {            AesCryptoServiceProvider aes = new AesCryptoServiceProvider();            aes.Key = GetKeyArray(password);            aes.Mode = _cipherMode;            aes.Padding = _paddingMode;            ICryptoTransform transform = aes.CreateDecryptor();            byte[] data = null;            try            {                data = transform.TransformFinalBlock(inputData, 0, inputData.Length);            }            catch            {                return null;            }            aes.Clear();            return data;        }         /// <summary>        /// 解密16進制的字符串為字符串        /// </summary>        /// <param name="inputString">要解密的字符串</param>        /// <param name="password">密碼</param>        /// <returns>字符串</returns>        public static string Decrypt(string inputString,string password)        {            byte[] toDecryptArray = ConvertStringToByte(inputString);            string decryptString = _encoding.GetString(Decrypt(toDecryptArray, password));            return decryptString;        }         /// <summary>        /// 解密16進制的字符串為字符串        /// </summary>        /// <param name="inputString">需要解密的字符串</param>        /// <returns>解密后的字符串</returns>        public static string DecryptString(string inputString)        {            return Decrypt(inputString, _passwd);        }        #endregion    }}

2.Android代碼:

package com.google.test; import java.io.UnsupportedEncodingException;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec; /** AES對稱加密解密類 **/public class AESHelper {     /** 算法/模式/填充 **/    private static final String CipherMode = "AES/ECB/PKCS5Padding";     /** 創建密鑰 **/    private static SecretKeySpec createKey(String password) {        byte[] data = null;        if (password == null) {            password = "";        }        StringBuffer sb = new StringBuffer(32);        sb.append(password);        while (sb.length() < 32) {            sb.append("0");        }        if (sb.length() > 32) {            sb.setLength(32);        }         try {            data = sb.toString().getBytes("UTF-8");        }catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return new SecretKeySpec(data,"AES");    }     /** 加密字節數據 **/    public static byte[] encrypt(byte[] content, String password) {        try {            SecretKeySpec key = createKey(password);            Cipher cipher = Cipher.getInstance(CipherMode);            cipher.init(Cipher.ENCRYPT_MODE, key);            byte[] result = cipher.doFinal(content);            return result;        }catch (Exception e) {            e.printStackTrace();        }        return null;    }     /** 加密(結果為16進制字符串) **/    public static String encrypt(String content, String password) {        byte[] data = null;        try {            data = content.getBytes("UTF-8");        }catch (Exception e) {            e.printStackTrace();        }        data = encrypt(data, password);        String result = byte2hex(data);        return result;    }     /** 解密字節數組 **/    public static byte[] decrypt(byte[] content, String password) {        try {            SecretKeySpec key = createKey(password);            Cipher cipher = Cipher.getInstance(CipherMode);            cipher.init(Cipher.DECRYPT_MODE, key);            byte[] result = cipher.doFinal(content);            return result;        }catch (Exception e) {            e.printStackTrace();        }        return null;    }     /** 解密16進制的字符串為字符串 **/    public static String decrypt(String content, String password) {        byte[] data = null;        try {            data = hex2byte(content);        }catch (Exception e) {            e.printStackTrace();        }        data = decrypt(data, password);        if (data == null)            return null;        String result = null;        try {            result = new String(data,"UTF-8");        }catch (UnsupportedEncodingException e) {            e.printStackTrace();        }        return result;    }     /** 字節數組轉成16進制字符串 **/    public static String byte2hex(byte[] b) { // 一個字節的數,        StringBuffer sb = new StringBuffer(b.length * 2);        String tmp = "";        for (int n = 0; n < b.length; n++) {            // 整數轉成十六進制表示            tmp = (java.lang.Integer.toHexString(b[n] & 0XFF));            if (tmp.length() == 1) {                sb.append("0");            }            sb.append(tmp);        }        return sb.toString().toUpperCase();// 轉成大寫    }     /** 將hex字符串轉換成字節數組 **/    private static byte[] hex2byte(String inputString) {        if (inputString == null || inputString.length() < 2) {            return new byte[0];        }        inputString = inputString.toLowerCase();        int l = inputString.length() / 2;        byte[] result = new byte[l];        for (int i = 0; i < l; ++i) {            String tmp = inputString.substring(2 * i, 2 * i + 2);            result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);        }        return result;    }}

另:要支持AES/ECB/ZeroBytePadding(對應.net的PaddingMode.Zeros),需引入bcprov .jar!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxx自由成熟| www.日韩系列| 97av视频在线| 国产精品日韩专区| 国产精品久久久久秋霞鲁丝| 91亚洲国产成人久久精品网站| 亚洲电影在线看| 亚洲精品免费在线视频| 成人免费网站在线看| 26uuu另类亚洲欧美日本老年| 国内免费精品永久在线视频| 激情亚洲一区二区三区四区| 精品国产1区2区| 青青a在线精品免费观看| 欧美性jizz18性欧美| 亚洲欧美中文字幕| 国内精品小视频在线观看| 中文字幕精品在线视频| 国产精品久久久久久av下载红粉| 色偷偷9999www| 亚洲精品999| 国产精品丝袜久久久久久高清| 亚洲精品www久久久| 欧美wwwwww| 亚洲国产成人精品一区二区| 日韩精品日韩在线观看| 久久久黄色av| 日韩精品视频免费专区在线播放| 欧美极品少妇xxxxⅹ裸体艺术| 欧美性视频精品| 亚洲aa中文字幕| 亚洲va国产va天堂va久久| zzjj国产精品一区二区| 国产亚洲精品高潮| 国产成人一区二区三区| 国产亚洲欧洲在线| 日韩精品免费看| 国产精品爽爽爽爽爽爽在线观看| 清纯唯美亚洲综合| 国产免费成人av| 美女性感视频久久久| 精品亚洲aⅴ在线观看| 夜夜嗨av色一区二区不卡| 久久精品中文字幕免费mv| 色噜噜狠狠狠综合曰曰曰88av| 日韩黄色高清视频| 色噜噜狠狠色综合网图区| 尤物yw午夜国产精品视频| 国产精品久久久久久久久久东京| 亚洲国产小视频在线观看| 欧美激情精品久久久久| 欧美自拍大量在线观看| 欧美一级视频在线观看| 国产亚洲成av人片在线观看桃| 欧美孕妇毛茸茸xxxx| 日韩一区二区三区国产| 久久综合免费视频影院| 一区二区三区黄色| 91久久国产综合久久91精品网站| 欧美日韩国产色视频| 日本精品久久电影| 国产视频精品久久久| 国产精品高潮在线| 亚洲最大av网站| 亚洲欧美日韩精品久久| 久久久国产精品x99av| 欧美福利视频在线| 欧美午夜激情在线| 97视频免费在线看| 亚洲少妇激情视频| 97在线观看视频| 疯狂做受xxxx高潮欧美日本| 美日韩精品免费观看视频| 欧美日韩福利电影| 色综合伊人色综合网站| 欧美成年人视频| 国产精品pans私拍| 亚洲欧美在线第一页| 91精品久久久久久久久久另类| 欧美刺激性大交免费视频| 中文字幕日韩专区| 成人av资源在线播放| 成人在线视频网站| 免费av一区二区| 欧美激情啊啊啊| 国产精品自拍偷拍| 日韩高清电影免费观看完整版| 久久久久久久亚洲精品| 欧美黑人一区二区三区| 亚洲一级片在线看| 欧美猛交ⅹxxx乱大交视频| 久久成人人人人精品欧| 国产视频精品一区二区三区| 亚洲视频在线看| 久色乳综合思思在线视频| 91av在线免费观看| 91在线免费视频| 亚洲欧美日韩成人| 久久好看免费视频| 亚洲欧美日韩图片| 亚洲国产中文字幕在线观看| 欧美日韩亚洲一区二区| 欧美高清在线视频观看不卡| 69久久夜色精品国产7777| 日韩av高清不卡| 久久精品人人爽| 国产精品一区二区三区久久| 亚洲欧美综合另类中字| 国产亚洲精品久久久久久牛牛| 欧美一区二区三区艳史| 日韩高清av一区二区三区| 国内伊人久久久久久网站视频| 亚洲精品福利在线| 精品视频中文字幕| 91亚洲精品在线| 国产亚洲精品美女| 91欧美激情另类亚洲| 国产精品专区第二| 日本亚洲精品在线观看| 国产精品爽爽爽| 成人免费黄色网| 日本成人激情视频| 欧美成人午夜视频| 欧美老女人bb| 精品视频久久久久久| 国产精品日本精品| 国产视频亚洲视频| 亚洲精品久久久久久久久| 成人性生交xxxxx网站| 亚洲激情成人网| 亚洲一级片在线看| 91在线看www| 亚洲天堂av在线免费| 久久九九有精品国产23| 最近中文字幕2019免费| 欧美老女人性视频| 国产精品96久久久久久| 伊人伊成久久人综合网站| 亚洲精品www| 97av在线视频| 国产福利视频一区二区| 亚洲乱码国产乱码精品精天堂| 精品亚洲国产成av人片传媒| 国产精品久久久久久久电影| 日韩av在线免费观看| 久久这里只有精品视频首页| 另类天堂视频在线观看| 国产女同一区二区| 国产欧美日韩视频| 亚洲成av人影院在线观看| 精品久久中文字幕| 91wwwcom在线观看| 亚洲国产精品va在线观看黑人| 国语自产精品视频在免费| 亚洲欧美日韩精品| 97激碰免费视频| 久久久精品影院| 国产精品色婷婷视频| 国产成人中文字幕| 欧美日本国产在线| 色噜噜狠狠狠综合曰曰曰| 91超碰中文字幕久久精品| 国产精品一香蕉国产线看观看| 日韩有码在线视频|