国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在java中編程實現數字簽名系統

2019-11-18 11:01:55
字體:
來源:轉載
供稿:網友

  一個數字簽名系統主要分為三個部分:
1。生成密鑰對
2。在數據發送端對數據進行簽名
3。在數據接收端對數據進行校驗數據簽名
下面從這三個方面分別說明:
1。生成密鑰對
生成密鑰對可用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!=1){
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(0);
}
try{
System.out.println("Generating a key pair.....");
KeyPairGenarator keyGen=KeyPairGenerator.getInstance("DSA");//使用DSA算法
KeyGen.initialize(1024,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[0]);
fileOut.write(pubKey);
fileOut.close();
fileOut=new FileOutputStream("privateKey_"+args[0]):
fileOut.write(privateKey);
file.out.close();
System.out.println("OK!");
}catch(Exception e){
}
}
}
}

2.生成數字簽名
從私鑰文件讀取數據文件并將其轉換為PrivateKey對象,可以使用KeyFactory類和PKCS8EncodeKeySpec類。KeyFactory可以利用給定的蜜月規范來建立不透明的密鑰對象,也可以適當的格式取出蜜月對象中的密鑰信息。 Signature是個引擎類,提供了諸如DSA或是RSA with md5這樣的數字簽名算法。密
碼學上安全的簽名算法可接受任意大小的輸入和一個私月,并產生一個比較短的(經常是固定大小的)前名字揭穿。并且,簽名和公鑰部反映有關私鑰的任何內容。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!=3)
{
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[0]);
byte[] encodedprivateKey=new byte[fileIn.available()];

finleIn.read(encodedprivateKey);
fileIn.close();

PKCS8EncodeKeySpec privKeySpec=
new PKCS8EncodeKeySpec(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[1]);
while(fis.available()!=0){
b=(byte)fis.read();
dsa.update(b);
}
fis.close();
byte[] sig=dsa.sign();
fileOut=new FileOutputStream(args[2]);
fileOut.write(sig);
fileOut.close();
System.out.println("OK");
}catch(Exception e){
/////////
}
}
}
///////////////////////End of SignData.java//////////////////
SignData.java從文津中讀取已編碼的私鑰字節,利用PKCS8EncodeKeySpec對象將已編碼的四月字節轉換為PrivateKey對象,然后利用Signature簽名數據文件,生成簽名數據,并將簽名數據寫道文件中。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌拉特前旗| 如皋市| 常熟市| 会宁县| 邳州市| 鄂伦春自治旗| 长乐市| 铁力市| 卓尼县| 聂拉木县| 乌什县| 江阴市| 永康市| 胶南市| 精河县| 巍山| 崇文区| 北流市| 兖州市| 新郑市| 长白| 原阳县| 临漳县| 新建县| 阳东县| 东城区| 囊谦县| 旬阳县| 福海县| 金沙县| 贡山| 夏邑县| 金门县| 柘荣县| 张家川| 宁国市| 波密县| 独山县| 东乡族自治县| 广汉市| 芦山县|