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

    转载请注明出处: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB 迭代法解方程

MATLAB 迭代法解方程 1、代码如下&#xff1a; %%牛顿迭代法解方程 function xnewton_interation(fun,dfun,x0,EPS) %简单牛顿迭代法%fun即迭代函数&#xff0c;dfun即迭代函数的一阶导数&#xff0c;x0为迭代初值&#xff0c;EPS为精度x1x0-fun(x0)/dfun(x0); %牛顿迭代公…

【12期 3月期刊 自荐】

12期的小伙伴看过来~因为网易博客的网络问题。我们把负责收集自荐的博客写到了CSDN里&#xff0c;希望大家在此篇博客的评论里&#xff0c;积极自荐自己的博客。 为了提高大家的积极性&#xff0c;我们评选优秀博客的方法升级为大家自荐博客&#xff0c;博客委员会当月负责人进…

超微服务器电源短接启动图解_教你一招,让你的电脑启动速度秒杀别人

win10快速启动其实是电脑的一种休眠模式&#xff0c;它将电脑中的一些本该关闭的文件保存到hiberfil.sys的磁盘文件中&#xff0c;这样打开电脑时就达到了快速开机的目的。接下来&#xff0c;我就将win10设置快速启动的方法分享给你们win10系统功能非常强大&#xff0c;最让大家…

MATLAB 求离散信号卷积

MATLAB 求离散信号卷积 代码如下&#xff1a; function [C,Ck] dt_convolution_advance(A,B,Ak,Bk) % dt_convolution_advance 计算离散信号卷积 % A 输入信号 % B 输入信号 % Ak 输入信号A下标 % Bk 输入信号B下标 % C 输出信号 % Ck 输出信号C下标 % 计算输入信号A&…

Oracle data type number

Oracle numberNUMBER [ (p [, s]) ]Number having precision p and scale s. Theprecision p can range from 1 to 38. The scale s can range from -84 to 127. Bothprecision and scale are in decimal digits. A NUMBER value requires from 1 to 22bytes.scale是可选的。SQ…

发布 项目_第十八期科创基金项目发布会圆满结束

第十八期科创基金项目发布会圆满结束贺电&#xff01;贺电!电子信息工程学院发来贺电&#xff1a;第十八届科创基金项目发布会圆满结束啦&#xff01;感谢导师们的支持、现场同学的热情参与和科协朋友后勤服务&#xff01;NUAA即使是寒冷的冬天也无法阻挡同学们对科创的热情,那…

Visual Studio .NET、.NET Framework和C#之间的联系

Visual Studio .NET是一种集成开发环境&#xff08;IDE&#xff09;&#xff0c;它包含3种高级程序设计语言&#xff0c;C#就是其中的一种&#xff1b;Visual Studio .NET之所以能把这三种语言有机结合起来并具有与平台无关的特性&#xff0c;其原因在于.NET Framework提供了公…

Fisher线性判别算法原理及实现 MATLAB

Fisher线性判别算法原理及实现 MATLAB 一、Fisher判别器原理 二、代码实现 clc; close all; clear; %% 生成数据 rng(2020); %指定一个种子 mu1 [0 3]; sigma1 [0.5 0; 0 0.5]; data1 mvnrnd(mu1,sigma1,300); %生成一个300*2的矩阵&#xff0c;每一列的数据分别以0&…

大话设计模式之外观模式

年年作品展&#xff0c;岁岁不相同&#xff0c;鹅黄新绿涟漪泛起思想的火花却不尽相同。十期的作品展&#xff0c;从13年3月20号開始到完美落幕&#xff0c;时至今日&#xff0c;她已经在我的记忆中成为过去。这朵小小的浪花激起的涟漪渐渐褪去&#xff0c;或许已没有或许&…

rdp协议打开 windows_CVE-2019-1182 windows 远程桌面RDP协议漏洞修复

原标题&#xff1a;CVE-2019-1182 windows 远程桌面RDP协议漏洞修复2019年8月14日&#xff0c;微软发布更新了windows的系统补丁&#xff0c;代号&#xff1a;CVE-2019-1181&#xff0c;CVE-2019-1182补丁针对与windows远程桌面远程代码执行漏洞进行了全面的修复&#xff0c;根…

HK算法原理及MATLAB实现

HK算法原理及MATLAB实现 一、编程原理 说明&#xff1a; 1、绿色框图中&#xff0c;当alpha取为最优权向量时&#xff0c;会使 取为最小值。arg的意思是当后面那个函数满足时&#xff0c;取出它的自变量的值。 2、注意后面那个式子是对b求偏导 3、e(t)大于0时&#xff0c;下…

软件工程的实践项目的自我目标

对实践项目完成后学习到的能力的预期 1.要学会java的相关知识&#xff0c;并能利用java做一个项目&#xff0c;能知道做一个项目的基本流程。可以先是一个小项目&#xff0c;之后再根据自身情况进行尝试。 2.学会团队协作&#xff0c;之前的数据库实践大多是一个人完成的&#…

《数据驱动安全:数据安全分析、可视化和仪表盘》一1.2.4 统计学

本节书摘来异步社区《数据驱动安全&#xff1a;数据安全分析、可视化和仪表盘》一书中的第1章 &#xff0c;第1.2.4节&#xff0c;[美]杰雅克布&#xff08;Jay Jacobs&#xff09;鲍布鲁迪斯&#xff08;Bob Rudis&#xff09; 著 薛杰 王占一 张卓 胡开勇 蒋梦飏 赵爽 …

python列反过来_xlwings 教程:使用Python更快速地处理Excel

Excel在当今商业中的使用非常普遍。在Dataquest&#xff0c;出于很多原因&#xff0c;我们通常推荐使用代码处理数据&#xff0c;并且我们的许多数据科学课程的目标是教授数据分析和数据科学的高效编码。但是&#xff0c;无论您多么喜欢使用Python&#xff0c;在一天结束时&…

多类线性分类器算法原理及代码实现 MATLAB

多类线性分类器算法原理及代码实现 MATLAB 一、算法原理 下面举例说明为何蓝圈部分在case2中是确定的而在case1中不确定&#xff1a; 二、代码实现 1、HK函数 function [] HK(w1_data,w2_data) %w1_data为第一类数据集 w2_data为第二类数据集 %此函数的作用为用HK算法对输…

(转) C#如何使用异步编程

怎么使用异步&#xff0c;就是用委托进行处理&#xff0c;如果委托对象在调用列表中只有一个方法&#xff0c;它就可以异步执行这个方法。委托类有两个方法&#xff0c;叫做BeginInvoke和EndInvoke&#xff0c;它们是用来异步执行使用。 异步有三种模式 等待模式&#xff0c;在…

javascript 的 ~ 操作符作用

2019独角兽企业重金招聘Python工程师标准>>> "~" operator in javascript. For anyone else who also didnt know what it does: it converts -1 to 0&#xff0c;可以节省用来比较-1的情况&#xff0c;如 if (~event.origin.indexOf(http://yoursite.com…

驻定相位原理(POSP)以及线性调频信号的频谱

最近看论文遇到了驻定相位原理&#xff0c;问老师直接给了我一本书让我看&#xff0c;看半天只有一段…不是这个方向的&#xff0c;半路出家做毕业设计需要用到这个定理&#xff0c;有错误的话请不吝赐教。 一、驻定相位原理 在数字信号处理中&#xff0c;经常需要将一个时域…

vue怎么合并两个视频_【软件分享】视频分割合并软件哪款好用呢?怎么剪切合并视频?...

现在有很多小伙伴都喜欢喜欢自己拍视频上传到各大视频平台&#xff0c;有时候会遇到关于视频剪辑方面的难题&#xff0c;比如说&#xff0c;视频怎么剪切&#xff1f;怎么将两段小视频合并成一个呢&#xff1f;这些都是一些比较常常遇到的问题&#xff0c;今天小编就给大家介绍…

怎样根据字段域查找到其在数据库中关系与属性

Infor SyteLine ERP中&#xff0c;很多时候需要做维护&#xff0c;我们需要从打开的window窗口的form中某一个输入Textbox域或是DropDownList域&#xff0c;去找到它是绑定了数据库中的哪一张表&#xff0c;哪一个字段的&#xff1f; 其相关的关系或是属性等。比如下面这个form…