【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.pswp.cn/news/258347.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/258347.shtml
英文地址,請注明出處:http://en.pswp.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…