999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MD5的加鹽消息摘要Java實現

2018-03-26 02:14:46趙一凡卞良叢昕
軟件導刊 2018年3期
關鍵詞:安全性

趙一凡 卞良 叢昕

摘要:

Java是一種面向對象的編程語言,具有良好的跨平臺性,其繼承、封裝、多態的特征能夠使程序更加穩定。通過對摘要破解網站的測試,發現短語言實現明文摘要加密,安全性并不高,而加鹽消息摘要有助于提高加密安全性。加鹽消息摘要保留了MD5算法的優點,通過增加原始明文長度,可解決短明文摘要加密不安全的問題。測試結果表明,加鹽消息摘要的安全性較高,加鹽后的消息摘要不易被破解網站反查詢破解。

關鍵詞:

消息摘要;加鹽法;MD5;加密

DOIDOI:10.11907/rjdk.172368

中圖分類號:TP312

文獻標識碼:A文章編號文章編號:16727800(2018)003021403

英文摘要Abstract:Java is an object oriented programming language, has a good crossplatform, its inheritance, encapsulation, multistate features make the program more stable. Through testing the digest to crack the website, we found that the short text is encrypted in plain text is not safe. However, the method with salt can improve the security of the encryption. Salt method to retain the advantages of MD5 algorithm, by increasing the length of the original text to solve the short text summary encryption is not safe. Will be added after the message summary results into the abstract crack site. The results show that the safety of salt method is higher, and the message digest after salt is not easy to be cracked.

英文關鍵詞Key Words:message digest; method with salt; MD5; encryption

0引言

信息技術的快速發展,使資源獲取變得越來越便捷,因此人們對身份和信息的完整性、保密性及信息的安全傳輸極為關注。消息摘要算法是單向散列函數中的一種,它不僅在安全通信中起著重要作用,而且是保障許多密碼協議與密碼算法安全的基本前提條件。散列算法也稱為散列函數、Hash函數、哈希函數、雜湊函數,在現代密碼學中扮演著重要角色[1]。Ronald L Rivest在1989年提出了MD2,在1990年提出MD4[2],并在1991年提出針對MD4的改進版本MD5、HAVAL[3]、RIPEMD[4]、RIPEMD-160[5]和SHA-1[6]等。數據加密技術被廣泛應用于網絡領域,目前常見的摘要算法有MD5、SHA-1等[7]。MD5的主要優點在于其是一種單向、極難逆的字符串變換算法[8],雖然也出現了若干MD5破解算法[9],但大多數為概率性破解,只對部分常見字符串集合有效,所以MD5仍是當前比較安全的算法。給明文信息加密雖然可以保證信息在傳輸和流通中的可靠性與安全性,但一些破解網站的出現也引發了人們對信息安全性的質疑。通過在破解網站上的反復測試發現,這些所謂的破解網站只能查詢常見的短明文摘要。若想解決短明文摘要加密安全性不高的問題,可以增加原始明文長度,即采用加鹽法。

1消息摘要技術

消息摘要技術又稱為數據摘要、消息摘要算法。消息摘要是從抽取的一組原始數據中抽取唯一特征碼的技術,常見的摘要算法有MD5、SHA-1等。MD5算法的基本原理是:以512位分組處理輸入字節串的信息,且每一分組又被劃分為16個32位子分組,經過一系列處理后,算法的輸出由4個32位分組組成,將這4個32位分組級聯后將生成一個128位散列值[10]。

1.1消息摘要技術特點

消息摘要技術具有如下特點:①無論輸入的數據長度是多少,摘要的結果都是一個固定長度的數據;②消息摘要是單向算法,只能根據數據計算出摘要,而無法將摘要還原成原數據;③相同的數據摘要結果一定相同;④不同數據產生的摘要結果不同,兩個數據中即使存在細微差別,產生的摘要也會產生很大不同。因此,數據不同摘要也不同,數據相同摘要一定相同,摘要相同原數據一定相同,消息摘要是一段數據的唯一身份標識。

1.2消息摘要用途

消息摘要具有以下兩方面用途:

(1)檢驗數據完整性。數據的發送方通過網絡與數據集及接收方建立連接,發送前事先計算摘要,發送時將數據從起始點發送到目的地,同時將摘要一同發往目的地。數據接收方收到數據后,立即對收到的數據文件進行摘要計算,如果是相同的數據摘要算法,會得到相同的摘要數據,再與發送來的摘要數據進行比較。如果摘要相同,則說明接收到的原始文件數據與發送前無差異;若不同,則意味著數據在發送傳輸過程中出現了問題。

(2)檢驗密碼一致性。一些商業軟件系統出于安全性考慮,不允許使用明文保存用戶密碼。此時,利用消息摘要既能保證安全性,又能完成一致性檢驗。消息摘要為單向算法,無法還原成原文,并且與原文具有一對一的唯一對應關系,所以消息摘要是密碼存儲和一致性檢驗的理想選擇。

2Java消息摘要API使用

Java語言具有良好的跨平臺性,可提高執行效率。Java中已經集成了消息摘要API,支持常用的消息摘要算法,只需調用這些API提供的方法即可輕松計算出消息摘要。

Java.security.MessageDigest類使用步驟如下:

(1)創建消息摘要對象(該對象中封裝了很多消息摘要算法)。該類是沒有構造器的,所以必須使用其工廠方法:

MessageDigest.getInstance("MD5");//給一個算法名,必須是Java消息摘要支持的算法名,如:MD5、SHA等

(2)update(byte[]data){…},它可以將數據提交給消息摘要算法,讓算法計算出消息摘要。方法可以多次調用,每調用一次就會將一批數據遞交給算法進行計算。如果原始數據非常大,可以分多次調用update。

(3)調用digest()摘要方法,獲得最終摘要結果,最終結果為定長(即128位的數,采用二進制數組byte[]數組存儲)的數據。

2.1計算字符串的MD5

提交給消息摘要的數據必須是byte類型數據,所以需要利用API將字符串轉化為byte數據再進行摘要計算。字符串根據編碼轉換為byte數據,如果需要了解字符串的編碼,可關注Unicode與UTF-8,示例代碼如下:

package single_md5;

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class StringMD5 {

public static void main(String[] args) throws UnsupportedEncodingException, NoSuchAlgorithmException {

//原始明文為“消息摘要”

String plainText="消息摘要";

//將明文轉化為一組二進制數組,摘要算法只能針對二進制數組進行轉化

byte[] data=plainText.getBytes("utf-8");

//獲得Java提供的MD5消息摘要算法

MessageDigest md5=MessageDigest.getInstance("MD5");

//將數據data提交到消息摘要類中計算,如果有很多數據,可以多次提交數據

md5.update(data);

//獲取摘要計算結果,結果由16個byte組成,一個128位數據

byte[] digest=md5.digest();

//為了便于查看結果,利用commons-coding程序提供的函數轉換為16進制字符串

//每個byte轉換為2個16進制字符,一共32個字符

char[] hex=Hex.encodeHex(digest);

System.out.println(hex); //輸出摘要結果

}

}

2.2計算文件的MD5

文件本身就是byte數據,只需將文件打開,將數據逐一提交到消息摘要類中,在全部數據提交后即可獲取摘要結果,示例代碼如下:

package single_md5;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class FileMD5 {

public static void main(String[] args) throws NoSuchAlgorithmException, IOException {

//計算commons-codec-1.3.jar文件的消息摘要

char[] md5=md5Hex(new File("lib/commons-codec-1.3.jar"));

System.out.println(md5);

//計算backup.jar文件的消息摘要

md5=md5Hex(new File("lib/backup.jar"));

System.out.println(md5);

//結果發現這兩個文件摘要相同,說明兩個文件內容相同,是副本關系

}

public static char[] md5Hex(File file) throws IOException, NoSuchAlgorithmException{

//打開文件

FileInputStream in=new FileInputStream(file);

//創建MD5消息摘要算法對象

MessageDigest md5=MessageDigest.getInstance("MD5");

//讀取文件,將文件中的數據提交到MD5算法中

int n;

byte[] buf=new byte[1024*8]; //8K讀取緩沖區

while((n=in.read(buf))!=-1){

//將每次讀取的結果分批提交到MD5算法中進行計算

md5.update(buf, 0, n);

}

in.close();

//將全部文件中的數據提交到MD5算法中后,可以獲取摘要計算的結果

byte[] digest=md5.digest();

//轉換為HEX編碼

char[] hex=Hex.encodeHex(digest);

return hex;

}

}

3MD5加密安全性提升

3.1消息摘要破解網站分析

消息摘要是單向算法,明文經過摘要得到的結果是無法還原為原始明文的,但有些網站提供破解服務,并宣稱可以根據摘要得到明文。經過在破解網站的反復輸入測試,總結消息摘要破解網站的破解能力如下:①MD5消息摘要破解網站存儲了大量摘要結果,通過反查詢方式進行破解,但無法破解復雜數據;②常用的字母組合可以被破解;③消息摘要網站不可能保存全部摘要技術,因為128位摘要數量極為龐大;④通過對破解網站的測試結果發現,短明文摘要加密是不安全的。

3.2加鹽法

若想解決短明文摘要加密安全性不高的問題,可以增加原始明文長度,該方法又稱為加鹽法。這個“鹽”常為字符串數據,將鹽與密碼一起合并計算摘要,可增加查詢破解的難度,從而提升安全性。破解網站的暴力查詢破解只能查詢常見的短明文的摘要,如果加長原文數據長度,摘要結果則很難查到。

3.3加鹽法實現

Java的摘要API可以非常方便地實現加鹽算法,但鹽的保密非常重要,將鹽和明文數據分批提交給MD5對象即可計算出摘要結果,示例代碼如下:

package single_md5;

import java.io.UnsupportedEncodingException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class SaltMD5 {

public static void main(String[] args) {

String salt="加鹽";

char[] md5=md5(salt+"123");

System.out.println("加鹽MD5"+new String(md5));

md5=md5("123");

System.out.println("MD5:"+new String(md5));

}

private static char[] md5(String plain) {

try {

//創建消息摘要對象

MessageDigest md5=MessageDigest.getInstance("MD5");

//明文提交到消息對象中計算摘要

byte[] data;

data = plain.getBytes("utf-8");

//將明文提交到消息摘要對象中

md5.update(data);

//計算出摘要結果

byte[] digest=md5.digest();

//轉換為16進制編碼

char[] hex=Hex.encodeHex(digest);

return hex;

} catch (NoSuchAlgorithmException e) {

//算法名錯誤,是一個不可能發生的異常

e.printStackTrace();

throw new RuntimeException(e);

}catch (UnsupportedEncodingException e) {

//編碼名錯誤,是一個不可能發生的異常

e.printStackTrace();

throw new RuntimeException(e);

}

}

}

4結語

本文在消息摘要理論研究的基礎上,針對短明文摘要加密安全性不高的問題,采用加鹽法增加原始明文長度,可增加查詢破解的難度,并給出了加鹽法計算消息摘要的示例代碼。加鹽法保留了MD5算法的優點,且安全性更高。然而,加密算法的改進同樣會促使攻擊者計算能力不斷提高,因此只有持續對原算法進行改進、擴展,才能使信息傳輸環境越來越安全。

參考文獻參考文獻:

[1]張仕斌,萬武南,張金全,等.應用密碼學[M].西安:西安電子科技大學出版社,2009.

[2]5R Rivest.The MD4 message digest algorithm,request for commentsRFC 1320[EB/OL].[20120414]. http://www. ietf.org/rfc/rfc1320.txt.

[3]ZHENG Y, PIEPRZYK J, SEBERRY J. HAVALa one way hashing algorithm with variable length of output: in advances in cryptologyauscrypt'92 [C].Berlin: Springer, Lecture Notes in Computer Science,1993,718:83104.

[4]RIJMEN V. Cryptanalysis and design of iterated block ciphers[D].Katholieke Universiteit, Doctoral Dissertation, Belgium Leuven, 1997:1115.

[5]DODIS Y, OLIVEIRA R, PIETRZAK K. On the generic insecurity of the full domain hash: advances in cryptologycrypto'2005[C].Berlin Heidelberg: Springer, Lecture Notes in Computer Science,2005,3621:449466.

[6]FIPS PUB 1801. Secure Hash standardSHA1[S].National Institute of Standards and TechnologyNIST, U.S. Department of Commerce, Washington DC,1995.

[7]張裔智,趙毅,湯小斌.MD5算法研究[J].計算機科學,2008,35(7):295297.

[8]陳松,黃煒.MD5算法的FPGA實現[J].信息安全與通信保密,2007(6):129130.

[9]崔國華,周榮華,粟栗.關于MD5強度分析的研究[J].計算機工程與科學,2007,29(1):4548.

[10]陳少暉,翟曉寧,閻娜,等.MD5算法破譯過程解析[J].計算機工程與應用,2010,46(19):109110.

責任編輯(責任編輯:黃健)

猜你喜歡
安全性
兩款輸液泵的輸血安全性評估
新染料可提高電動汽車安全性
既有建筑工程質量安全性的思考
某既有隔震建筑檢測與安全性鑒定
基于安全性需求的高升力控制系統架構設計
加強廣播電視信息安全性的思考
科技傳播(2019年22期)2020-01-14 03:05:32
網約車安全性提高研究
活力(2019年17期)2019-11-26 00:42:18
注意藥酒服用的安全性
基層中醫藥(2018年6期)2018-08-29 01:20:20
田間施用滅幼脲在桃中的殘留安全性評估
ApplePay橫空出世 安全性遭受質疑 拿什么保護你,我的蘋果支付?
主站蜘蛛池模板: 久996视频精品免费观看| 中国精品自拍| 日韩av高清无码一区二区三区| 欧美亚洲一区二区三区导航| 日韩视频免费| 日本成人精品视频| 永久免费AⅤ无码网站在线观看| 国产无码精品在线播放| 中文字幕亚洲综久久2021| 亚洲色图欧美视频| 国产又爽又黄无遮挡免费观看| 二级特黄绝大片免费视频大片| 国产精品99r8在线观看| 亚洲国产成熟视频在线多多| 国产一区二区福利| 色窝窝免费一区二区三区| 欧美丝袜高跟鞋一区二区| 亚洲永久色| 国产精品片在线观看手机版| 久久精品人妻中文系列| m男亚洲一区中文字幕| 亚洲不卡影院| 2021国产v亚洲v天堂无码| 久久9966精品国产免费| 天堂网亚洲综合在线| 国产福利2021最新在线观看| 亚洲日韩国产精品综合在线观看| 亚洲综合色区在线播放2019| 午夜欧美在线| 国产拍在线| 欧美视频在线不卡| 日韩毛片免费观看| 3344在线观看无码| 九九热这里只有国产精品| 国产亚卅精品无码| 成人中文在线| 国产精品流白浆在线观看| 亚洲首页在线观看| 国产情侣一区二区三区| 中文字幕在线观看日本| 国产大片喷水在线在线视频| 日本久久久久久免费网络| 亚洲欧美日本国产综合在线| 国产地址二永久伊甸园| 精品无码日韩国产不卡av | 超薄丝袜足j国产在线视频| 国产区人妖精品人妖精品视频| 欧美在线三级| 欧美日韩国产在线人| 国产91视频免费观看| 国产黑丝视频在线观看| 亚洲伦理一区二区| 国产毛片一区| 国产一区二区三区精品欧美日韩| 国产福利拍拍拍| 青青青国产视频| 在线免费无码视频| 在线亚洲精品福利网址导航| 午夜高清国产拍精品| 麻豆精选在线| 久久综合色视频| 欧美区一区二区三| 欧美高清三区| 成AV人片一区二区三区久久| www亚洲天堂| 99久久国产自偷自偷免费一区| 国产精品一线天| 亚洲一级毛片| 国产精品毛片在线直播完整版| 国产一区二区网站| 亚洲色无码专线精品观看| 五月婷婷丁香色| 国产欧美日韩va| 精品少妇人妻av无码久久| 欧美日本在线播放| 精品在线免费播放| 久久无码av三级| 欧美黄网站免费观看| 91福利一区二区三区| 日韩精品一区二区深田咏美| 夜夜高潮夜夜爽国产伦精品| 91福利一区二区三区|