文章詳情頁
JAVA上加密算法的實(shí)現(xiàn)用例
瀏覽:94日期:2024-06-11 11:52:13
內(nèi)容: 內(nèi)容: 第1章 基礎(chǔ)知識(shí) 第2章 在JAVA中的實(shí)現(xiàn) 第3章 小結(jié) 作者簡(jiǎn)介 MD5/SHA1,DSA,DESede/DES,Diffie-Hellman的使用 王輝 (ddxxkk@21cn.com)2001 年 7 月 第1章基礎(chǔ)知識(shí) 1.1. 單鑰密碼體制單鑰密碼體制是一種傳統(tǒng)的加密算法,是指信息的發(fā)送方和接收方共同使用同一把密鑰進(jìn)行加解密。 通常,使用的加密算法比較簡(jiǎn)便高效,密鑰簡(jiǎn)短,加解密速度快,破譯極其困難。但是加密的安全性依靠密鑰保管的安全性,在公開的計(jì)算機(jī)網(wǎng)絡(luò)上安全地傳送和保管密鑰是一個(gè)嚴(yán)峻的問題,并且如果在多用戶的情況下密鑰的保管安全性也是一個(gè)問題。單鑰密碼體制的代表是美國(guó)的DES1.2. 消息摘要一個(gè)消息摘要就是一個(gè)數(shù)據(jù)塊的數(shù)字指紋。即對(duì)一個(gè)任意長(zhǎng)度的一個(gè)數(shù)據(jù)塊進(jìn)行計(jì)算,產(chǎn)生一個(gè)唯一指印(對(duì)于SHA1是產(chǎn)生一個(gè)20字節(jié)的二進(jìn)制數(shù)組)。 消息摘要有兩個(gè)基本屬性:兩個(gè)不同的報(bào)文難以生成相同的摘要 難以對(duì)指定的摘要生成一個(gè)報(bào)文,而由該報(bào)文反推算出該指定的摘要 代表:美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所的SHA1和麻省理工學(xué)院Ronald Rivest提出的MD51.3. Diffie-Hellman密鑰一致協(xié)議密鑰一致協(xié)議是由公開密鑰密碼體制的奠基人Diffie和Hellman所提出的一種思想。 先決條件,允許兩名用戶在公開媒體上交換信息以生成'一致'的,可以共享的密鑰代表:指數(shù)密鑰一致協(xié)議(Exponential Key Agreement Protocol)1.4. 非對(duì)稱算法與公鑰體系1976年,Dittie和Hellman為解決密鑰管理問題,在他們的奠基性的工作'密碼學(xué)的新方向'一文中,提出一種密鑰交換協(xié)議,允許在不安全的媒體上通過通訊雙方交換信息,安全地傳送秘密密鑰。在此新思想的基礎(chǔ)上,很快出現(xiàn)了非對(duì)稱密鑰密碼體制,即公鑰密碼體制。在公鑰體制中,加密密鑰不同于解密密鑰,加密密鑰公之于眾,誰都可以使用;解密密鑰只有解密人自己知道。它們分別稱為公開密鑰(Public key)和秘密密鑰(Private key)。 迄今為止的所有公鑰密碼體系中,RSA系統(tǒng)是最著名、最多使用的一種。RSA公開密鑰密碼系統(tǒng)是由R.Rivest、A.Shamir和L.Adleman俊教授于1977年提出的。RSA的取名就是來自于這三位發(fā)明者的姓的第一個(gè)字母1.5. 數(shù)字簽名所謂數(shù)字簽名就是信息發(fā)送者用其私鑰對(duì)從所傳報(bào)文中提取出的特征數(shù)據(jù)(或稱數(shù)字指紋)進(jìn)行RSA算法操作,以保證發(fā)信人無法抵賴曾發(fā)過該信息(即不可抵賴性),同時(shí)也確保信息報(bào)文在經(jīng)簽名后末被篡改(即完整性)。當(dāng)信息接收者收到報(bào)文后,就可以用發(fā)送者的公鑰對(duì)數(shù)字簽名進(jìn)行驗(yàn)證。 在數(shù)字簽名中有重要作用的數(shù)字指紋是通過一類特殊的散列函數(shù)(HASH函數(shù))生成的,對(duì)這些HASH函數(shù)的特殊要求是:接受的輸入報(bào)文數(shù)據(jù)沒有長(zhǎng)度限制; 對(duì)任何輸入報(bào)文數(shù)據(jù)生成固定長(zhǎng)度的摘要(數(shù)字指紋)輸出 從報(bào)文能方便地算出摘要; 難以對(duì)指定的摘要生成一個(gè)報(bào)文,而由該報(bào)文反推算出該指定的摘要; 兩個(gè)不同的報(bào)文難以生成相同的摘要 代表:DSA第2章在JAVA中的實(shí)現(xiàn) 2.1. 相關(guān)Diffie-Hellman密鑰一致協(xié)議和DES程序需要JCE工具庫的支持,可以到 http://java.sun.com/security/index.html 下載JCE,并進(jìn)行安裝。簡(jiǎn)易安裝把 jce1.2.1lib 下的所有內(nèi)容復(fù)制到 %java_home%libext下,如果沒有ext目錄自行建立,再把jce1_2_1.jar和sunjce_provider.jar添加到CLASSPATH內(nèi),更詳細(xì)說明請(qǐng)看相應(yīng)用戶手冊(cè) 2.2. 消息摘要MD5和SHA的使用使用方法: 首先用生成一個(gè)MessageDigest類,確定計(jì)算方法java.security.MessageDigest alga=java.security.MessageDigest.getInstance('SHA-1');添加要進(jìn)行計(jì)算摘要的信息alga.update(myinfo.getBytes());計(jì)算出摘要byte[] digesta=alga.digest();發(fā)送給其他人你的信息和摘要其他人用相同的方法初始化,添加信息,最后進(jìn)行比較摘要是否相同algb.isEqual(digesta,algb.digest())相關(guān)AIPjava.security.MessageDigest 類static getInstance(String algorithm)返回一個(gè)MessageDigest對(duì)象,它實(shí)現(xiàn)指定的算法參數(shù):算法名,如 SHA-1 或MD5void update (byte input)void update (byte[] input)void update(byte[] input, int offset, int len)添加要進(jìn)行計(jì)算摘要的信息byte[] digest()完成計(jì)算,返回計(jì)算得到的摘要(對(duì)于MD5是16位,SHA是20位)void reset()復(fù)位static boolean isEqual(byte[] digesta, byte[] digestb)比效兩個(gè)摘要是否相同代碼:import java.security.*;public class myDigest { public static void main(String[] args) { myDigest my=new myDigest(); my.testDigest(); } public void testDigest() { try { String myinfo='我的測(cè)試信息'; //java.security.MessageDigest alg=java.security.MessageDigest.getInstance('MD5'); java.security.MessageDigest alga=java.security.MessageDigest.getInstance('SHA-1'); alga.update(myinfo.getBytes()); byte[] digesta=alga.digest(); System.out.println('本信息摘要是:'+byte2hex(digesta)); //通過某中方式傳給其他人你的信息(myinfo)和摘要(digesta) 對(duì)方可以判斷是否更改或傳輸正常 java.security.MessageDigest algb=java.security.MessageDigest.getInstance('SHA-1'); algb.update(myinfo.getBytes()); if (algb.isEqual(digesta,algb.digest())) { System.out.println('信息檢查正常'); } else { System.out.println('摘要不相同'); } } catch (java.security.NoSuchAlgorithmException ex) { System.out.println('非法摘要算法'); } } public String byte2hex(byte[] b) //二行制轉(zhuǎn)字符串 { String hs=''; String stmp=''; for (int n=0;n
標(biāo)簽:
Java
相關(guān)文章:
1. 網(wǎng)頁中img圖片使用css實(shí)現(xiàn)等比例自動(dòng)縮放不變形(代碼已測(cè)試)2. Python數(shù)據(jù)相關(guān)系數(shù)矩陣和熱力圖輕松實(shí)現(xiàn)教程3. js select支持手動(dòng)輸入功能實(shí)現(xiàn)代碼4. 基于selenium及python實(shí)現(xiàn)下拉選項(xiàng)定位select5. PHP橋接模式Bridge Pattern的優(yōu)點(diǎn)與實(shí)現(xiàn)過程6. CSS3實(shí)現(xiàn)動(dòng)態(tài)翻牌效果 仿百度貼吧3D翻牌一次動(dòng)畫特效7. Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊8. jsp文件下載功能實(shí)現(xiàn)代碼9. 如何通過python實(shí)現(xiàn)IOU計(jì)算代碼實(shí)例10. Java xml數(shù)據(jù)格式返回實(shí)現(xiàn)操作
排行榜
