版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第 1 章基礎(chǔ)知識1.1. 單鑰密碼體制單鑰密碼體制是一種傳統(tǒng)的加密算法,是指信息的發(fā)送方和接收方共同使用同一把密鑰進行加解密。通常 , 使用的加密算法 比較簡便高效 , 密鑰簡短,加解密速度快,破譯極其困難。但是加密的安全性依靠密鑰保管的安全性 , 在公開的計算機網(wǎng)絡(luò)上安全地傳送和保管密鑰是一個嚴峻的問題,并且如果在多用戶的情況下密鑰的保管安全性也是一個問題。單鑰密碼體制的代表是美國的 DES1.2. 消息摘要一個消息摘要就是一個數(shù)據(jù)塊的數(shù)字指紋。即對一個任意長度的一個數(shù)據(jù)塊進行計算,產(chǎn)生一個唯一指?。▽τ?SHA1 是產(chǎn)生一個 20 字節(jié)的二進制數(shù)組)。消息摘要有兩個基本屬性:·
2、 兩個不同的報文難以生成相同的摘要· 難以對指定的摘要生成一個報文,而由該報文反推算出該指定的摘要代表:美國國家標準技術(shù)研究所的 SHA1 和麻省理工學院 Ronald Rivest 提出的 MD51.3. Diffie-Hellman 密鑰一致協(xié)議密鑰一致協(xié)議是由公開密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的一種思想。先決條件 , 允許兩名用戶在公開媒體上交換信息以生成"一致"的 , 可以共享的密鑰代表:指數(shù)密鑰一致協(xié)議 (Exponential Key Agreement Protocol)1.4. 非對稱算法與公鑰體系1976 年,Di
3、ttie 和 Hellman 為解決密鑰管理問題,在他們的奠基性的工作"密碼學的新方向"一文中,提出一種密鑰交換協(xié)議,允許在不安全的媒體上通過通訊雙方交換信息,安全地傳送秘密密鑰。在此新思想的基礎(chǔ)上,很快出現(xiàn)了非對稱密鑰密碼體制,即公鑰密碼體制。在公鑰體制中,加密密鑰不同于解密密鑰,加密密鑰公之于眾,誰都可以使用;解密密鑰只有解密人自己知道。它們分別稱為公開密鑰(Public key)和秘密密鑰(Private key)。迄今為止的所有公鑰密碼體系中,RSA 系統(tǒng)是最著名、最多使用的一種。RSA 公開密鑰密碼系統(tǒng)是由 R.Rivest、A.Shamir 和 L.Adlema
4、n 俊教授于 1977 年提出的。RSA 的取名就是來自于這三位發(fā)明者的姓的第一個字母1.5. 數(shù)字簽名所謂數(shù)字簽名就是信息發(fā)送者用其私鑰對從所傳報文中提取出的特征數(shù)據(jù)(或稱數(shù)字指紋)進行 RSA 算法操作,以保證發(fā)信人無法抵賴曾發(fā)過該信息(即不可抵賴性),同時也確保信息報文在經(jīng)簽名后末被篡改(即完整性)。當信息接收者收到報文后,就可以用發(fā)送者的公鑰對數(shù)字簽名進行驗證。在數(shù)字簽名中有重要作用的數(shù)字指紋是通過一類特殊的散列函數(shù)(HASH 函數(shù))生成的,對這些 HASH 函數(shù)的特殊要求是:1. 接受的輸入報文數(shù)據(jù)沒有長度限制;2. 對任何輸入報文數(shù)據(jù)生成固定長度的摘要(數(shù)字指紋)輸出3. 從報文能
5、方便地算出摘要;4. 難以對指定的摘要生成一個報文,而由該報文反推算出該指定的摘要;5. 兩個不同的報文難以生成相同的摘要代表:DSA回頁首第 2 章在 JAVA 中的實現(xiàn)2.1. 相關(guān)Diffie-Hellman 密鑰一致協(xié)議和 DES 程序需要 JCE 工具庫的支持 , 可以到 2.2. 消息摘要 MD5 和 SHA 的使用使用方法 :首先用生成一個 MessageDigest 類 , 確定計算方法添加要進行計算摘要的信息alga.update(myinfo.getBytes();計算出摘要byte digesta=alga.digest();發(fā)送給其他人你的信息和摘
6、要其他人用相同的方法初始化 , 添加信息 , 最后進行比較摘要是否相同algb.isEqual(digesta,algb.digest()相關(guān) AIPstatic getInstance(String algorithm)返回一個 MessageDigest 對象 , 它實現(xiàn)指定的算法參數(shù) : 算法名 , 如 SHA-1 或 MD5void update (byte input)void update (byte input)void update(byte input, int offset, int len)添加要進行計算摘要的信息byte digest()完成計算 , 返回計算得到的摘要
7、 ( 對于 MD5 是 16 位 ,SHA 是 20 位 )void reset()復位static boolean isEqual(byte digesta, byte digestb)比效兩個摘要是否相同代碼:import java.security.*; public class myDigest public static void main(String args) myDigest my=new myDigest(); my.testDigest(); public void testDigest() try String myinfo="我的測試信息" /ja
8、va.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); /
9、 通過某中方式傳給其他人你的信息 (myinfo) 和摘要 (digesta) 對方可以判斷是否更改或傳輸正常 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("摘要不相同"
10、); catch (java.security.NoSuchAlgorithmException ex) System.out.println("非法摘要算法"); public String byte2hex(byte b) / 二行制轉(zhuǎn)字符串 String hs="" String stmp="" for (int n=0;n<b.length;n+) stmp=(java.lang.Integer.toHexString(bn & 0XFF); if (stmp.length()=1) hs=hs+"0&
11、quot;+stmp; else hs=hs+stmp; if (n<b.length-1) hs=hs+":" return hs.toUpperCase(); 2.3. 數(shù)字簽名 DSA1. 對于一個用戶來講首先要生成他的密鑰對 , 并且分別保存生成一個 KeyPairGenerator 實例java.security.KeyPairGenerator keygen=java.security.KeyPairGenerator.getInstance("DSA");/如果設(shè)定隨機產(chǎn)生器就用如相代碼初始化SecureRandom secrand=
12、new SecureRandom(); secrand.setSeed("tttt".getBytes(); / 初始化隨機產(chǎn)生器keygen.initialize(512,secrand); / 初始化密鑰生成器/否則keygen.initialize(512); /生成密鑰公鑰 pubkey 和私鑰 prikey KeyPair keys=keygen.generateKeyPair(); / 生成密鑰組PublicKey pubkey=keys.getPublic(); PrivateKey prikey=keys.getPrivate(); /分別保存在 mypri
13、key.dat 和 mypubkey.dat 中 , 以便下次不在生成/( 生成密鑰對的時間比較長java.io.ObjectOutputStream out=new java.io.ObjectOutputStream( new java.io.FileOutputStream("myprikey.dat"); out.writeObject(prikey); out.close(); out=new java.io.ObjectOutputStream(new java.io.FileOutputStream("mypubkey.dat");out.
14、writeObject(pubkey); out.close(); 2. 用他私人密鑰 (prikey) 對他所確認的信息 (info) 進行數(shù)字簽名產(chǎn)生一個簽名數(shù)組從文件中讀入私人密鑰 (prikey)java.io.ObjectInputStream in=new java.io.ObjectInputStream( new java.io.FileInputStream("myprikey.dat"); PrivateKey myprikey=(PrivateKey)in.readObject(); in.close(); 初始一個 Signature 對象 , 并用
15、私鑰對信息簽名java.security.Signature signet=java.security.Signature.getInstance("DSA"); signet.initSign(myprikey); signet.update(myinfo.getBytes(); byte signed=signet.sign(); 把信息和簽名保存在一個文件中 (myinfo.dat) java.io.ObjectOutputStream out=new java.io.ObjectOutputStream( new java.io.FileOutputStream(&
16、quot;myinfo.dat"); out.writeObject(myinfo); out.writeObject(signed); out.close(); 把他的公鑰的信息及簽名發(fā)給其它用戶3. 其他用戶用他的公共密鑰 (pubkey) 和簽名 (signed) 和信息 (info) 進行驗證是否由他簽名的信息讀入公鑰 PublicKey pubkey=(PublicKey)in.readObject(); in.close();讀入簽名和信息 String info=(String)in.readObject();
17、60;byte signed=(byte)in.readObject(); in.close();初始一個 Signature 對象 , 并用公鑰和簽名進行驗證 signetcheck.initVerify(pubkey); signetcheck.update(info.getBytes(); 對于密鑰的保存本文是用對象流的方式保存和傳送的 , 也可可以用編碼的方式保存 . 注意要 具休說明如下o public key 是用 X.509 編碼的 , 例碼如下 : byte bobEncodedPubKey=mypubl
18、ic.getEncoded(); / 生成編碼 / 傳送二進制編碼 / 以下代碼轉(zhuǎn)換編碼為相應(yīng) key 對象 X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(bobEncodedPubKey); KeyFactory keyFactory = KeyFactory.getInstance("DSA"); PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec); o 對于 Private key 是用 PKCS#8 編碼 , 例碼如下 :b
19、yte bPKCS=myprikey.getEncoded(); / 傳送二進制編碼 / 以下代碼轉(zhuǎn)換編碼為相應(yīng) key 對象 PKCS8EncodedKeySpec priPKCS8=new PKCS8EncodedKeySpec(bPKCS); KeyFactory keyf=KeyFactory.getInstance("DSA"); PrivateKey otherprikey=keyf.generatePrivate(priPKCS8); 4. 常用 API public static KeyPairGenerator getInstance(Strin
20、g algorithm) throws NoSuchAlgorithmException 以指定的算法返回一個 KeyPairGenerator 對象 參數(shù) : algorithm 算法名 . 如 :"DSA","RSA"public void initialize(int keysize)以指定的長度初始化 KeyPairGenerator 對象 , 如果沒有初始化系統(tǒng)以 1024 長度默認設(shè)置參數(shù) :keysize 算法位長 . 其范圍必須在 512 到 1024 之間,且必須為 64 的倍數(shù)public void initial
21、ize(int keysize, SecureRandom random) 以指定的長度初始化和隨機發(fā)生器初始化 KeyPairGenerator 對象 參數(shù) :keysize 算法位長 . 其范圍必須在 512 到 1024 之間,且必須為 64 的倍數(shù) random 一個隨機位的來源 ( 對于 initialize(int keysize) 使用了默認隨機器public abstract KeyPair generateKeyPair() 產(chǎn)生新密鑰對 public PrivateKey getPrivate() 返回私鑰publ
22、ic PublicKey getPublic() 返回公鑰 public static Signature getInstance(String algorithm) throws NoSuchAlgorithmException 返回一個指定算法的 Signature 對象 參數(shù) algorithm 如 :"DSA"public final void initSign(PrivateKey privateKey) throws InvalidKeyException 用指定的私鑰初始化 參數(shù) :priv
23、ateKey 所進行簽名時用的私鑰public final void update(byte data) throws SignatureException public final void update(byte data) throws SignatureException public final void update(byte data, int off, int len) throws SignatureException 添加要簽名的信息public final byte sign() throws Sign
24、atureException 返回簽名的數(shù)組 , 前提是 initSign 和 updatepublic final void initVerify(PublicKey publicKey) throws InvalidKeyException 用指定的公鑰初始化 參數(shù) :publicKey 驗證時用的公鑰public final boolean verify(byte signature) throws SignatureException 驗證簽名是否有效 , 前提是已經(jīng) initVerify 初始化 參數(shù) : sign
25、ature 簽名數(shù)組 import java.security.*; import java.security.spec.*; public class testdsa public static void main(String args) throws java.security.NoSuchAlgorithmException, java.lang.Exception testdsa my=new testdsa(); my.run(); public void run() / 數(shù)字簽名生成密鑰 / 第一步生成密鑰對 , 如果已經(jīng)生成過 , 本過程就可以跳過 , / 對用戶來講 mypr
26、ikey.dat 要保存在本地 / 而 mypubkey.dat 給發(fā)布給其它用戶 if (new java.io.File("myprikey.dat").exists()=false) if (generatekey()=false) System.out.println("生成密鑰對敗"); return; ; / 第二步 , 此用戶 / 從文件中讀入私鑰 , 對一個字符串進行簽名后保存在一個文件 (myinfo.dat) 中 / 并且再把 myinfo.dat 發(fā)送出去 / 為了方便數(shù)字簽名也放進了 myifno.dat 文件中 , 當然也可分別
27、發(fā)送 try java.io.ObjectInputStream in=new java.io.ObjectInputStream( new java.io.FileInputStream("myprikey.dat"); PrivateKey myprikey=(PrivateKey)in.readObject(); in.close(); / java.security.spec.X509EncodedKeySpec pubX509= / new java.security.spec.X509EncodedKeySpec(bX509); /java.security.s
28、pec.X509EncodedKeySpec pubkeyEncode= / java.security.spec.X509EncodedKeySpec String myinfo="這是我的信息" / 要簽名的信息 / 用私鑰對信息生成數(shù)字簽名 java.security.Signature signet=java.security.Signature.getInstance("DSA"); signet.initSign(myprikey); signet.update(myinfo.getBytes(); byte signed=signet.si
29、gn(); / 對信息的數(shù)字簽名 System.out.println("signed( 簽名內(nèi)容 )="+byte2hex(signed); / 把信息和數(shù)字簽名保存在一個文件中 java.io.ObjectOutputStream out=new java.io.ObjectOutputStream( new java.io.FileOutputStream("myinfo.dat"); out.writeObject(myinfo); out.writeObject(signed); out.close(); System.out.println(
30、"簽名并生成文件成功"); catch (java.lang.Exception e) e.printStackTrace(); System.out.println("簽名并生成文件失敗"); ; / 第三步 / 其他人通過公共方式得到此戶的公鑰和文件 / 其他人用此戶的公鑰 , 對文件進行檢查 , 如果成功說明是此用戶發(fā)布的信息 . / try java.io.ObjectInputStream in=new java.io.ObjectInputStream( new java.io.FileInputStream("mypubkey.d
31、at"); PublicKey pubkey=(PublicKey)in.readObject(); in.close(); System.out.println(pubkey.getFormat(); in=new java.io.ObjectInputStream(new java.io.FileInputStream("myinfo.dat"); String info=(String)in.readObject(); byte signed=(byte)in.readObject(); in.close(); java.security.Signature
32、 signetcheck=java.security.Signature.getInstance("DSA"); signetcheck.initVerify(pubkey); signetcheck.update(info.getBytes(); if (signetcheck.verify(signed) System.out.println("info="+info); System.out.println("簽名正常"); else System.out.println("非簽名正常"); catch (j
33、ava.lang.Exception e) e.printStackTrace(); / 生成一對文件 myprikey.dat 和 mypubkey.dat- 私鑰和公鑰 , / 公鑰要用戶發(fā)送 ( 文件 , 網(wǎng)絡(luò)等方法 ) 給其它用戶 , 私鑰保存在本地 public boolean generatekey() try java.security.KeyPairGenerator keygen = java.security.KeyPairGenerator.getInstance("DSA"); / SecureRandom secrand=new SecureRan
34、dom(); / secrand.setSeed("tttt".getBytes(); / 初始化隨機產(chǎn)生器 / keygen.initialize(576,secrand); / 初始化密鑰生成器 keygen.initialize(512); KeyPair keys=keygen.genKeyPair(); / KeyPair keys=keygen.generateKeyPair(); / 生成密鑰組 PublicKey pubkey=keys.getPublic(); PrivateKey prikey=keys.getPrivate(); java.io.Obj
35、ectOutputStream out=new java.io.ObjectOutputStream( new java.io.FileOutputStream("myprikey.dat"); out.writeObject(prikey); out.close(); System.out.println("寫入對象 prikeys ok"); out=new java.io.ObjectOutputStream( new java.io.FileOutputStream("mypubkey.dat"); out.writeObje
36、ct(pubkey); out.close(); System.out.println("寫入對象 pubkeys ok"); System.out.println("生成密鑰對成功"); return true; catch (java.lang.Exception e) e.printStackTrace(); System.out.println("生成密鑰對失敗"); return false; ; public String byte2hex(byte b) String hs="" String stm
37、p="" for (int n=0;n<b.length;n+) stmp=(java.lang.Integer.toHexString(bn & 0XFF); if (stmp.length()=1) hs=hs+"0"+stmp; else hs=hs+stmp; if (n<b.length-1) hs=hs+":" return hs.toUpperCase(); 2.4. DESede/DES 對稱算法首先生成密鑰 , 并保存 ( 這里并沒的保存的代碼 , 可參考 DSA 中的方法 )KeyGenerat
38、or keygen = KeyGenerator.getInstance(Algorithm);SecretKey deskey = keygen.generateKey();用密鑰加密明文 (myinfo), 生成密文 (cipherByte)Cipher c1 = Cipher.getInstance(Algorithm);c1.init(Cipher.ENCRYPT_MODE,deskey);byte cipherByte=c1.doFinal(myinfo.getBytes();傳送密文和密鑰 , 本文沒有相應(yīng)代碼可參考 DSA.用密鑰解密密文c1 = Cipher.getInstan
39、ce(Algorithm);c1.init(Cipher.DECRYPT_MODE,deskey);byte clearByte=c1.doFinal(cipherByte);相對來說對稱密鑰的使用是很簡單的 , 對于 JCE 來講支技 DES,DESede,Blowfish 三種加密術(shù)對于密鑰的保存各傳送可使用對象流或者用二進制編碼 , 相關(guān)參考代碼如下SecretKey deskey = keygen.generateKey(); byte desEncode=deskey.getEncoded(); javax.crypto.spec.SecretKeySpec destmp = new
40、 javax.crypto.spec.SecretKeySpec(desEncode,Algorithm);SecretKey mydeskey=destmp;相關(guān) APIKeyGenerator 在 DSA 中已經(jīng)說明 , 在添加 JCE 后在 instance 進可以如下參數(shù)DES,DESede,Blowfish,HmacMD5,HmacSHA1public static final Cipher getInstance(java.lang.String transformation) throws java.security.NoSuchAlgorithmException, NoSuc
41、hPaddingException返回一個指定方法的 Cipher 對象參數(shù) :transformation 方法名 ( 可用 DES,DESede,Blowfish) 用指定的密鑰和模式初始化 Cipher 對象參數(shù) :opmode 方式 (ENCRYPT_MODE, DECRYPT_MODE, WRAP_MODE,UNWRAP_MODE)key 密鑰public final byte doFinal(byte input) throws java.lang.IllegalStateException, IllegalBlockSizeException, BadPaddingEx
42、ception 對 input 內(nèi)的串 , 進行編碼處理 , 返回處理后二進制串 , 是返回解密文還是加解文由 init 時的 opmode 決定注意 : 本方法的執(zhí)行前如果有 update, 是對 updat 和本次 input 全部處理 , 否則是本 inout 的內(nèi)容/* 安全程序 DESede/DES 測試 */ import java.security.*; import javax.crypto.*; public class testdes public static void main(String args) testdes my=new testdes(); my.run(
43、); public void run() / 添加新安全算法 , 如果用 JCE 就要把它添加進去 Security.addProvider(new vider.SunJCE(); String Algorithm="DES" / 定義 加密算法 , 可用 DES,DESede,Blowfish String myinfo="要加密的信息" try / 生成密鑰 KeyGenerator keygen = KeyGenerator.getInstance(Algorithm); SecretKey deskey = k
44、eygen.generateKey(); / 加密 System.out.println("加密前的二進串 :"+byte2hex(myinfo.getBytes(); System.out.println("加密前的信息 :"+myinfo); Cipher c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.ENCRYPT_MODE,deskey); byte cipherByte=c1.doFinal(myinfo.getBytes(); System.out.println("加密后的二
45、進串 :"+byte2hex(cipherByte); / 解密 c1 = Cipher.getInstance(Algorithm); c1.init(Cipher.DECRYPT_MODE,deskey); byte clearByte=c1.doFinal(cipherByte); System.out.println("解密后的二進串 :"+byte2hex(clearByte); System.out.println("解密后的信息 :"+(new String(clearByte); catch (java.security.NoS
46、uchAlgorithmException e1) e1.printStackTrace(); catch (javax.crypto.NoSuchPaddingException e2) e2.printStackTrace(); catch (java.lang.Exception e3) e3.printStackTrace(); public String byte2hex(byte b) / 二行制轉(zhuǎn)字符串 String hs="" String stmp="" for (int n=0;n<b.length;n+) stmp=(java
47、.lang.Integer.toHexString(bn & 0XFF); if (stmp.length()=1) hs=hs+"0"+stmp; else hs=hs+stmp; if (n<b.length-1) hs=hs+":" return hs.toUpperCase(); 2.5. Diffie-Hellman 密鑰一致協(xié)議公開密鑰密碼體制的奠基人 Diffie 和 Hellman 所提出的 "指數(shù)密鑰一致協(xié)議"(Exponential Key Agreement Protocol), 該協(xié)議不要求別的安
48、全性 先決條件 , 允許兩名用戶在公開媒體上交換信息以生成"一致"的 , 可以共享的密鑰。在 JCE 的中實現(xiàn)用戶 alice 生成 DH 類型的密鑰對 , 如果長度用 1024 生成的時間請 , 推薦第一次生成后保存 DHParameterSpec, 以便下次使用直接初始化 . 使其速度加快System.out.println("ALICE: 產(chǎn)生 DH 對 ."); KeyPairGenerator aliceKpairGen = KeyPairGenerator.getInstance("DH"); aliceKpairGen.
49、initialize(512); KeyPair aliceKpair = aliceKpairGen.generateKeyPair();alice 生成公鑰發(fā)送組 bobbyte alicePubKeyEnc = aliceKpair.getPublic().getEncoded();bob 從 alice 發(fā)送來的公鑰中讀出 DH 密鑰對的初始參數(shù)生成 bob 的 DH 密鑰對注意這一步一定要做 , 要保證每個用戶用相同的初始參數(shù)生成的 DHParameterSpec dhParamSpec = (DHPublicKey)alicePubKey).getParams(); KeyPair
50、Generator bobKpairGen = KeyPairGenerator.getInstance("DH"); bobKpairGen.initialize(dhParamSpec); KeyPair bobKpair = bobKpairGen.generateKeyPair();bob 根據(jù) alice 的公鑰生成本地的 DES 密鑰 KeyAgreement bobKeyAgree = KeyAgreement.getInstance("DH"); bobKeyAgree.init(bobKpair.getPrivate(); bobKey
51、Agree.doPhase(alicePubKey, true); SecretKey bobDesKey = bobKeyAgree.generateSecret("DES");bob 已經(jīng)生成了他的 DES 密鑰 , 他現(xiàn)把他的公鑰發(fā)給 alice, byte bobPubKeyEnc = bobKpair.getPublic().getEncoded();alice 根據(jù) bob 的公鑰生成本地的 DES 密鑰 , 解碼 KeyAgreement aliceKeyAgree = KeyAgreement.getInstance("DH"); ali
52、ceKeyAgree.init(aliceKpair.getPrivate(); aliceKeyAgree.doPhase(bobPubKey, true); SecretKey aliceDesKey = aliceKeyAgree.generateSecret("DES");bob 和 alice 能過這個過程就生成了相同的 DES 密鑰 , 在這種基礎(chǔ)就可進行安全能信常用 API public static KeyPairGenerator getInstance(String algorithm) throws NoSuchAlgorithmE
53、xception 以指定的算法返回一個 KeyPairGenerator 對象 參數(shù) : algorithm 算法名 . 如 : 原來是 DSA, 現(xiàn)在添加了 DiffieHellman(DH)public void initialize(int keysize) 以指定的長度初始化 KeyPairGenerator 對象 , 如果沒有初始化系統(tǒng)以 1024 長度默認設(shè)置 參數(shù) :keysize 算法位長 . 其范圍必須在 512 到 1024 之間,且必須為 64 的倍數(shù) 注意 : 如果用 1024 生長的時間很長 , 最好生成一次后就保存
54、, 下次就不用生成了public void initialize(AlgorithmParameterSpec params) throws InvalidAlgorithmParameterException 以指定參數(shù)初始化 public DHParameterSpec getParams() 返回 public static KeyFactory getInstance(String algorithm) throws NoSuchAlgorithmException 以指定的算法返回一個 KeyFactory
55、0;參數(shù) : algorithm 算法名 :DSH,DHpublic final PublicKey generatePublic(KeySpec keySpec) throws InvalidKeySpecException 根據(jù)指定的 key 說明 , 返回一個 PublicKey 對象 public X509EncodedKeySpec(byte encodedKey) 根據(jù)指定的二進制編碼的字串生成一個 key 的說明 參數(shù) :encodedKey 二進制編碼的字串 ( 一般能過 PublicKey.getEncoded() 生成 ) 返回一個指定算法的 KeyAgreement 對象 參數(shù) :algorithm 算法名 , 現(xiàn)在只能是 DiffieHellman(DH) 用指定的私鑰初始化 參數(shù) :key 一個私鑰 boolean lastPhase) 用指定的公鑰進行定位 ,lastPhase 確定這是否是最后一個公鑰 , 對于兩個用戶的 情況下就可以多次定次 , 最
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 策劃公司前臺工作總結(jié)
- 運輸物流行業(yè)顧問工作總結(jié)
- 2024新年寄語匯編(32篇)
- 制冷技術(shù)轉(zhuǎn)讓協(xié)議書(2篇)
- 創(chuàng)業(yè)合作投資協(xié)議書(2篇)
- 2024年計算機專業(yè)實習心得體會
- 易錯點08 中國近代史時間問題-備戰(zhàn)2023年中考歷史考試易錯題(解析版)
- 地理中國的世界遺產(chǎn)課件中圖版選修
- 2025屆陜西省咸陽市武功縣中考生物全真模擬試題含解析
- 《公共政策過程》課件
- 房地產(chǎn)估計第八章成本法練習題參考
- 2023年廣東羅浮山旅游集團有限公司招聘筆試題庫及答案解析
- 《社會主義核心價值觀》優(yōu)秀課件
- DB11-T1835-2021 給水排水管道工程施工技術(shù)規(guī)程高清最新版
- 《妊娠期糖尿病患者個案護理體會(論文)3500字》
- 解剖篇2-1內(nèi)臟系統(tǒng)消化呼吸生理學
- 《小學生錯別字原因及對策研究(論文)》
- 便攜式氣體檢測報警儀管理制度
- 酒店安全的管理制度
- (大潔王)化學品安全技術(shù)說明書
- 2022年科學道德與學術(shù)規(guī)范知識競賽決賽題庫(含答案)
評論
0/150
提交評論