转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992

在前面的两篇文章中。我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现不同平台下加密算法的一致性。

只是话说起来,DES算法是在1976年被美国的国家标准局定为联邦资料的加密标准的,到如今已经接近40年了。我们都知道。在计算机的世界里有一个摩尔定律。就是每过18个月。计算机的晶体管的数量就会翻一番,相应的计算速度也会翻倍,尽管如今的发展速度有所放缓,可是每过三年左右,计算机的运算速度还是在翻倍的增长。DES採用的是56的加密密钥,在计算机计算能力飞速发展的今天,已经不再安全,经过算法优化的暴力破解方式能在一天之内就将DES密钥破解,因此,DES加密仅仅推荐使用在加密等级不高的场景中。既然DES加密算法不再安全,那么有没有更加强大的加密算法呢?当然有!今天给大家介绍的,就是如今被金融机构等对安全性要求等级非常高的机构所广泛应用的加密算法——AES加密。

高级加密标准(英语:Advanced Encryption Standard。缩写:AES)。在password学中又称Rijndael加密法,是美国联邦政府採用的一种区块加密标准。这个标准用来替代原先的DES。已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日公布于FIPS PUB 197。并在2002年5月26日成为有效的标准。

2006年。高级加密标准已然成为对称密钥加密中最流行的算法之中的一个。

严格地说,AES和Rijndael加密法并不全然一样(尽管在实际应用中二者能够互换)。由于Rijndael加密法能够支持更大范围的区块和密钥长度:AES的区块长度固定为128 比特,密钥长度则能够是128,192或256比特;而Rijndael使用的密钥和区块长度能够是32位的整数倍,以128位为下限。256比特为上限。加密过程中使用的密钥是由Rijndael密钥生成方案产生。

截至2006年,针对AES唯一的成功攻击是旁道攻击。

美国国家安全局审核了全部的參与竞选AES的终于入围者(包含Rijndael)。觉得他们均能够满足美国政府传递非机密文件的安全须要。2003年6月。美国政府宣布AES能够用于加密机密文件。

这标志着。由美国国家安全局NSA批准在最高机密信息上使用的加密系统首次能够被公开使用。很多大众化产品仅仅使用128位密钥当作默认值;由于最高机密文件的加密系统必须保证数十年以上的安全性,故猜測NSA可能觉得128位太短。才以更长的密钥长度为最高机密的加密保留了安全空间。

通常破解一个区块加密系统最常见的方式。是先对其较弱版本号(加密循环次数较少)尝试各种攻击。AES中128位密钥版本号有10个加密循环。192比特密钥版本号有12个加密循环,256比特密钥版本号则有14个加密循环。至2006年为止,最著名的攻击是针对AES 7次加密循环的128位密钥版本号,8次加密循环的192比特密钥版本号,和9次加密循环的256比特密钥版本号所作的攻击。

因此,在当前阶段来说,AES加密是非常安全的,因此能够用来对我们的敏感数据进行加密。以下给出android平台下AES加密的代码实现。

须要注意的是。在4.2以上的版本号中,SecureRandom实例的获取方式发生了变化,因此为了兼容高版本号。加入了版本号推断。

package com.example.androiddemo;import java.security.SecureRandom;import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;import android.annotation.SuppressLint;/*** * @ClassName: com.example.androiddemo.AESUtil* @Description: AES加密解密工具类* @author zhaokaiqiang* @date 2014-11-15 上午10:08:44* */
@SuppressLint("TrulyRandom")
public class AESUtil {private final static String HEX = "0123456789ABCDEF";private final static int JELLY_BEAN_4_2 = 17;/*** 加密* * @param key*            密钥* @param src*            加密文本* @return* @throws Exception*/public static String encrypt(String key, String src) throws Exception {byte[] rawKey = getRawKey(key.getBytes());byte[] result = encrypt(rawKey, src.getBytes());return toHex(result);}/*** 解密* * @param key*            密钥* @param encrypted*            待揭秘文本* @return* @throws Exception*/public static String decrypt(String key, String encrypted) throws Exception {byte[] rawKey = getRawKey(key.getBytes());byte[] enc = toByte(encrypted);byte[] result = decrypt(rawKey, enc);return new String(result);}/*** 获取256位的加密密钥* * @param seed* @return* @throws Exception*/@SuppressLint("TrulyRandom")private static byte[] getRawKey(byte[] seed) throws Exception {KeyGenerator kgen = KeyGenerator.getInstance("AES");SecureRandom sr = null;// 在4.2以上版本号中,SecureRandom获取方式发生了改变if (android.os.Build.VERSION.SDK_INT >= JELLY_BEAN_4_2) {sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");} else {sr = SecureRandom.getInstance("SHA1PRNG");}sr.setSeed(seed);// 256 bits or 128 bits,192bitskgen.init(256, sr);SecretKey skey = kgen.generateKey();byte[] raw = skey.getEncoded();return raw;}/*** 真正的加密过程* * @param key* @param src* @return* @throws Exception*/private static byte[] encrypt(byte[] key, byte[] src) throws Exception {SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, skeySpec);byte[] encrypted = cipher.doFinal(src);return encrypted;}/*** 真正的解密过程* * @param key* @param encrypted* @return* @throws Exception*/private static byte[] decrypt(byte[] key, byte[] encrypted)throws Exception {SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, skeySpec);byte[] decrypted = cipher.doFinal(encrypted);return decrypted;}public static String toHex(String txt) {return toHex(txt.getBytes());}public static String fromHex(String hex) {return new String(toByte(hex));}public static byte[] toByte(String hexString) {int len = hexString.length() / 2;byte[] result = new byte[len];for (int i = 0; i < len; i++)result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2),16).byteValue();return result;}public static String toHex(byte[] buf) {if (buf == null)return "";StringBuffer result = new StringBuffer(2 * buf.length);for (int i = 0; i < buf.length; i++) {appendHex(result, buf[i]);}return result.toString();}private static void appendHex(StringBuffer sb, byte b) {sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));}
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/bhlsheji/p/4802733.html

【Android工具】DES终结者加密时报——AES加密演算法相关推荐

  1. android n AES加密,AndroidP AES 加密适配

    message Android N Didn't find class "org.apache.harmony.security.provider.crypto.SHA1PRNG_Secur ...

  2. android、ios、php之间AES加密解密

    使用原因: 因为在项目中,需要在与客户端(IOS,Android)交互的时候,保存一些私有信息,不被别人看到,所以,使用了比较流行的可以反向加解密的AES. PHP 源码 <?php$aes = ...

  3. android开发 java与c# 兼容AES加密

    由于android客户端采用的是AES加密,服务器用的是asp.net(c#),所以就造成了不一致的加密与解密问题,下面就贴出代码,已经试验过. using System; using System. ...

  4. Android数据加密DES、3DES、AES

    在Android开发中,可能会遇到对数据进行加密的情况.典型的对称加密算法有DES.3DES.AES等. 一.DES DES算法的入口参数有三个:Key.Data.Mode.其中Key为7个字节共56 ...

  5. android Pbkdf2,在C夏普的AES加密和在Android中使用PBKDF2WithHmacSHA1解密

    以下是C#Cryptor的代码,它使用256位长密钥,128位长IV,5000次迭代.它使用Rfc2898DeriveBytes类,因此它与Android中的PBKDF2WithHmacSHA1相同. ...

  6. python加密方式-AES加密ECB模式

    安装所需包 pip install pycryptodome 编写代码 import base64from Crypto.Cipher import AES from Crypto.Util.Padd ...

  7. 数据传输加密——非对称加密算法RSA+对称算法AES(适用于java,android和Web)

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 转载请注明出处:http://blog.csdn.net/chay_chan/article/details/58605605 数据 ...

  8. Android中的AES加密-下

    本文为笔记,记录,写记录后为了方便查阅也为了能更好的记住 参考 什么是AES算法? 前言 本章主要是针对AES加密的原理过程进行梳理.不在于细节,了解各个参数和类的功能来帮助我们再加密是更好的选择如何 ...

  9. AES加密解密(含python解析工具)

    url:https://web.ewt360.com/register/#/login 升学登录密码加密 aes简介: 密钥K:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的.密钥为接 ...

最新文章

  1. Excel导入SQL数据库完整代码
  2. 如何实现1像素的表格
  3. 图解SSL/TLS协议
  4. 二十五、求单点的最短路径
  5. ubuntu安装redis_在Ubuntu上安装Redis
  6. 常见排序算法之快速排序
  7. 几种常用的排序算法详解和C++排序算法模板(附有动图理解)
  8. 【软件设计师教程】程序设计语言基础知识
  9. Windows+Caffe+VS2013+python接口配置过程
  10. php中文搜索工具,Laravel 下 TNTSearch+jieba-PHP 实现中文全文搜索
  11. __builtin_ffs 实现原理
  12. 多目标优化算法:多目标黄金搜索优化算法MOGSO(提供MATLAB代码)
  13. 微信小程序实现收货地址城市选择效果(添加收货地址)
  14. 他是阿里P11,靠写代码写成合伙人,身家几十亿,没有他,我们可能刷不了淘宝!...
  15. java 字节转文件_java 文件和byte 互转
  16. 学习笔记 - 如何增长
  17. prometheus-简介
  18. 自然图像抠图/视频抠像技术发展情况梳理(image matting, alpha matting, video matting)--计算机视觉专题1
  19. Aspectj some problems
  20. 【推荐系统系列6】ALS推荐算法原理

热门文章

  1. 乔布斯和任正非相比,谁更厉害?
  2. 《花落红尘》:对两性社会非爱即恨的文学消解
  3. 美丽新世界:当代日本视觉文化展
  4. 电脑入门学习最佳方法
  5. louvain算法python_复杂网络任务6:Louvain社区发现算法的原理、细节和实现,作业,六,以及...
  6. python中缩进_python编程中的缩进是什么意思
  7. dell跳过开机硬件检测,关闭dell开机硬件自检 戴尔笔记本电脑每次开机自动硬件检查怎么取消?...
  8. netty worker线程数量_Dubbo线程模型
  9. weka和matlab完成完整分类实验
  10. Java生鲜电商平台-促销系统的架构设计与源码解析