?? keygeneratorexample.java
字號(hào):
/*
* Copyright (c) 2004 ???. All Rights Reserved.
*
* Version 1.0 , Created on 2004-3-10
*
*/
/**
* @author Devon
*/
/**
* 如何產(chǎn)生和保存密鑰
*/
import java.security.*;
import java.security.spec.*;
import javax.crypto.*;
import java.io.*;
public class KeyGeneratorExample {
public static void main(String[] args) {
try{
//產(chǎn)生單鑰加密的密鑰(myKey)
KeyGenerator keyGenerator = KeyGenerator.getInstance("DESede"); //采用DESede算法
keyGenerator.init(168); //選擇DESede算法,密鑰長(zhǎng)度為112位或168位
Key myKey = keyGenerator.generateKey(); //生成密鑰
System.out.println("得到單鑰加密密鑰");
//產(chǎn)生雙鑰的密鑰對(duì)(keyPair)
KeyPairGenerator keyPairGenerator=KeyPairGenerator.getInstance("RSA"); //采用RSA算法
keyPairGenerator.initialize(1024); //指定密鑰長(zhǎng)度為1024位
KeyPair keyPair = keyPairGenerator.generateKeyPair(); //生成密鑰對(duì)
System.out.println("生成張三的公鑰對(duì)");
//保存公鑰的字節(jié)數(shù)組
File f = new File("publicKey.dat"); //保存公鑰到文件publicKey.dat
FileOutputStream fout = new FileOutputStream(f);
fout.write(keyPair.getPublic().getEncoded()); //得到公鑰的字節(jié)數(shù)組
fout.close(); //關(guān)閉文件輸出流
System.out.println("保存公鑰到文件: "+f.getAbsolutePath());
//用Java對(duì)象序列化保存私鑰,通常應(yīng)對(duì)私鑰加密后再保存
ObjectOutputStream oout = new ObjectOutputStream(new FileOutputStream("privateKey.dat")); //保存私鑰到文件privateKey.dat
oout.writeObject(keyPair.getPrivate()); //序列化私鑰
oout.close(); //關(guān)閉輸出流
System.err.println("保存私鑰到: privateKey.dat");
//從文件中得到公鑰編碼的字節(jié)數(shù)組
FileInputStream fin = new FileInputStream("publicKey.dat"); //打天publicKey.dat
ByteArrayOutputStream baout = new ByteArrayOutputStream(); //用于寫入文件的字節(jié)流
int aByte = 0;
while ((aByte = fin.read())!= -1) //從文件讀取一個(gè)字節(jié)
{
baout.write(aByte); //寫入一個(gè)字節(jié)
}
fin.close(); //關(guān)閉文件輸入流
byte[] keyBytes = baout.toByteArray(); //得到公鑰的字節(jié)數(shù)組
baout.close(); //關(guān)閉字節(jié)數(shù)組輸出流
//從字節(jié)數(shù)組解碼公鑰
X509EncodedKeySpec x509KeySpec =new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA"); //指定算法RSA,得到一個(gè)KeyFactory的實(shí)例
PublicKey pubKey = keyFactory.generatePublic(x509KeySpec); //解碼公鑰
System.out.println("從文件中成功得到公鑰");
}catch (Exception ex){ex.printStackTrace();
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -