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