生成密鑰對 生成密鑰對可用java提供的類KeyPairGenerator
用其中的getInstance方法創建KeypairGenerator對象
在用initialize進行初始化
最後用generateKeyPair生成密鑰對
密鑰對生成後
就可以將其寫入文件中
通過網絡或其他方式公告用戶
用戶接收到數據文件和簽名文件後
就可以使用公約來校驗數據文件的數字簽名
判斷數據在網絡中的傳輸是否被非法修改
////GenerateKeyPair
java/////////////
import java
io
*;
import java
security
*;
public class GenerateKeyPair{
public static void main(String[] args){
boolean bHelp=false;//sign for show help
FileOutputStream fileOut;//輸出密鑰到文件
byte[] pubkey;//存儲已編碼的公鑰字節
byte[] privKey;//存儲已編碼的私鑰字節
if(args
length!=
){
System
out
println(
Usage:GenerateKeyPair <keyname>;
System
out
println(
Option:
);
System
out
println(
<keyname>:The key name that using to genera
te filename
);
System
exit(
);
}
try{
System
out
println(
Generating a key pair
);
KeyPairGenarator keyGen=KeyPairGenerator
getInstance(
DSA
);//使用DSA算法
KeyGen
initialize(
new SecureRandom());
KeyPair pair=keyGen
generateKeyPair();
PublicKey pub=pair
getPublic();
PrivateKey priv=pair
getPrivate();
pubkey=pub
getEncoded();
privateKey= priv
getEncoded();
fileOut=new FileOutputStream(
PublicKey_
+args[
]);
fileOut
write(pubKey);
fileOut
close();
fileOut=new FileOutputStream(
privateKey_
+args[
]):
fileOut
write(privateKey);
file
out
close();
System
out
println(
OK!
);
}catch(Exception e){
}
}
}
}
生成數字簽名 從私鑰文件讀取數據文件並將其轉換為PrivateKey對象
可以使用KeyFactory類和PKCS
EncodeKeySpec類
KeyFactory可以利用給定的蜜月規范來建立不透明的密鑰對象
也可以適當的格式取出蜜月對象中的密鑰信息
Signature是個引擎類
提供了諸如DSA或是RSA with MD
這樣的數字簽名算法
密
碼學上安全的簽名算法可接受任意大小的輸入和一個私月
並產生一個比較短的(常常是固定大小的)前名字揭穿
並且
簽名和公鑰部反映有關私鑰的任何內容
Signature對象即可用於數據簽名
也可用於校驗某個簽名是否為預制關聯的數據的真實簽名
簽名或教研簽名的第一步是創建signature實例
為特定類型的簽名算法或取signature對象的途徑是調用signature德getInstance靜態方法
初始化方法有兩個
取決於Signature的用途
initSign(
)////用於簽名
initVerify(
)//用於校驗
如果sigature初始化為簽名
則可將帶錢數據通過update方法提供給對象在調用sign來產生簽名即可
下面以一個實例來說明
///////////////////SignData
java////////////////
import java
io
*;
import java
security
*;
import java
security
spec
*;
public class SignData{
public static void main(String [] args)
{
FileOutputStream fileOut;
byte b;
if(args
length!=
)
{
System
out
println(
Usage:SignData <PrivateKey> <dataFile> <SignatureFile>
);
System
out
println(
Option:
);
System
out
println(
<PrivateKey>:The file name of the private Key
);
System
out
println(
<DataFile>: The filename that want to signature
);
System
out
println(
<signatureFile>:the filename containing signture data
);
}
try{
System
out
println(
Generating a digital signature
);
FileInputStream fileIn=new FileInputStream(args[
]);
byte[] encodedprivateKey=new byte[fileIn
available()];
finleIn
read(encodedprivateKey);
fileIn
close();
PKCS
EncodeKeySpec privKeySpec=
new PKCS
EncodeKeySpec(encodedprivateKey);
KeyFactory keyFactory=KeyFactory
getInstance(
DSA
);
PrivateKey privKey=keyFactory
generatePrivate(privateKeySpec);
Signature dsa=Signature
getInstance(
SHA/DSA
);
dsa
initSign(privKey);
FileInputStream fis=new FileInputStream(args[
]);
while(fis
available()!=
){
b=(byte)fis
read();
dsa
update(b);
}
fis
close();
byte[] sig=dsa
sign();
fileOut=new FileOutputStream(args[
]);
fileOut
write(sig);
fileOut
close();
System
out
println(
OK
);
}catch(Exception e){
/////////
}
}
}
///////////////////////End of SignData
java//////////////////
SignData
java從文津中讀取已編碼的私鑰字節
利用PKCS
EncodeKeySpec對象將已編碼的四月字節轉換為PrivateKey對象
然後利用Signature簽名數據文件
生成簽名數據
並將簽名數據寫道文件中
//////VerifySign
java/////////////
import java
io
*;
import java
security
*;
import java
security
spec
*;
public class VerifySign{
public static void main(String [] args)
{
if(args
length!=
){
System
out
println(
Usage:VerifySign <PublicKey> <dataFile> <SignatureFile>
);
System
out
println(
Option:
);
System
out
println(
<Public Key >The filename of the public key
);
System
out
println(
<DataFile>The filename that want to signature
);
System
out
println(
<SignatureFile>:The file name containing signature data
);
System
exit(
);
}
try{
FileInputStream fileIn=new FileInputStream(args[
]);
byte[] encodedpubKey =new byte[fileIn
available()];
fileIn
read(encodedpubKey);
fileIn
close();
X
EncodedKeySpec pubKeySpec=
new X
EncodedKeySpec(encodedpubKey);
KeyFactory keyFactory=KeyFactory
getInstance(
DSA
);
PublicKey pubKey=keyFactory
generatePublic(pubKeySpec);
FileInputStream sigStream=new FileInputStream(args[
]);
byte[] signature=new byte[sigStream
available()];
sigStream
read(signature);
sigStream
close();
signature sigObj=Signature
getInstance(
SHA
WithDSA
);
sigObj
initVerify(pubKey);
fileIn=new FileInputStream(args[
]);
byte b;
while(fileIn
available())!=
)
{
b=(byte)fileIn
read();
sigObj
update(b);
};
fileIn
close();
boolean verifies=sigObj
verify(signature);
System
out
println(
Signature verifies:
+verifies);
}catch(Exception e){/////////////
}
}
}
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25387.html