import?java.security.InvalidKeyException;

成都地區(qū)優(yōu)秀IDC服務器托管提供商(創(chuàng)新互聯(lián)公司).為客戶提供專業(yè)的成都電信服務器托管,四川各地服務器托管,成都電信服務器托管、多線服務器托管.托管咨詢專線:13518219792
import?java.security.Key;
import?java.security.KeyPair;
import?java.security.KeyPairGenerator;
import?java.security.NoSuchAlgorithmException;
import?java.security.PrivateKey;
import?java.security.PublicKey;
import?java.security.SecureRandom;
import?java.security.Signature;
import?java.security.SignatureException;
import?java.util.logging.Level;
import?java.util.logging.Logger;
/**
*?ECDSA?160bit?簽名及簽名驗證例子
*/
public?class?ECDSASignature?{
public?static?void?main(String?argv[])?{
signatureTest();
}
public?static?void?signatureTest()?{
/**
*?密鑰對生成
*/
KeyPairGenerator?keyPairGenerator?=?null;
try?{
keyPairGenerator?=?KeyPairGenerator.getInstance("EC");
}?catch?(NoSuchAlgorithmException?ex)?{
return;
}
SecureRandom?secureRandom?=?new?SecureRandom();
keyPairGenerator.initialize(160,?secureRandom);
KeyPair?pair?=?keyPairGenerator.generateKeyPair();
Key?publicKey?=?pair.getPublic();
Key?privateKey?=?pair.getPrivate();
//?字符串
String?hako?=?"test";
/**
*?私鑰簽名(ECDSA?160bit)
*/
byte[]?sign?=?null;
try?{
Signature?signatureSign?=?null;
signatureSign?=?Signature.getInstance("NONEwithECDSA");
signatureSign.initSign((PrivateKey)?privateKey,?secureRandom);
signatureSign.update(hako.getBytes());
sign?=?signatureSign.sign();
System.out.println("sign:?"?+?new?String(sign));
}?catch?(InvalidKeyException?|?NoSuchAlgorithmException?|?SignatureException?ex)?{
Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE,?null,?ex);
}
/**
*?用公鑰進行簽名驗證
*/
Signature?signatureVerify?=?null;
try?{
signatureVerify?=?Signature.getInstance("NONEwithECDSA");
signatureVerify.initVerify((PublicKey)?publicKey);
signatureVerify.update(hako.getBytes());
boolean?verifyResult?=?signatureVerify.verify(sign);
System.out.println(verifyResult???"簽名OK"?:?"簽名NG");
}?catch?(NoSuchAlgorithmException?|?InvalidKeyException?|?SignatureException?e)?{
Logger.getLogger(ECDSASignature.class.getName()).log(Level.SEVERE,?null,?e);
}
}
}
功能說明:
Java歸檔工具
語法:
jar [ 命令選項 ] [manifest] destination input-file [input-files]
補充說明:
jar工具是個java應用程序,可將多個文件合并為單個JAR歸檔文件。jar是個多用途的存檔及壓縮工具,它基于ZIP和ZLIB壓縮格式。然而, 設計jar的主要目的是便于將java applet或應用程序打包成單個歸檔文件。將applet或應用程序的組件(.class 文件、圖像和聲音)合并成單個歸檔文件時,可以用java代理(如瀏覽器)在一次HTTP事務處理過程中對它們進行下載,而不是對每個組件都要求一個新連 接。這大大縮短了下載時間。jar還能壓縮文件,從而進一步提高了下載速度。此外,它允許applet的作者對文件中的各個項進行簽名,因而可認證其來 源。jar工具的語法基本上與tar命令的語法相同。
命令選項
-c 在標準輸出上創(chuàng)建新歸檔或空歸檔。
-t 在標準輸出上列出內(nèi)容表。
-x[file] 從標準輸入提取所有文件,或只提取指定的文件。如果省略了file,則提取所有文件;否則只提取指定文件。
-f 第二個參數(shù)指定要處理的jar文件。在-c(創(chuàng)建)情形中,第二個參數(shù)指的是要創(chuàng)建的jar文件的名稱(不是在標準輸出上)。在-t(表(或-x(抽取)這兩種情形中,第二個參數(shù)指定要列出或抽取的jar文件。
-v 在標準錯誤輸出設備上生成長格式的輸出結(jié)果。
-m 包括指定的現(xiàn)有清單文件中的清單信息。用法舉例:“jar cmf myManifestFile myJarFile *.class”
-0 只儲存,不進行 ZIP 壓縮。
-M 不創(chuàng)建項目的清單文件。
-u 通過添加文件或更改清單來更新現(xiàn)有的 JAR 文件。例如:“jar -uf foo.jar foo.class”將文件 foo.class 添加到現(xiàn)有的JAR文件foo.jar中,而“jar umf manifest foo.jar”則用manifest中的信息更新foo.jar的清單。
-C 在執(zhí)行 jar 命令期間更改目錄。例如:“jar -uf foo.jar -C classes *”將classes目錄內(nèi)的所有文件加到foo.jar中,但不添加類目錄本身。
程序示例
1:將當前目錄下所有CLASS文件打包成新的JAR文件:
jar cf file.jar *.class
2:顯示一個JAR文件中的文件列表
jar tf file.jar
3:將當前目錄下的所有文件增加到一個已經(jīng)存在的JAR文件中
jar cvf file.jar *
所謂"數(shù)字簽名"就是通過某種密碼運算生成一系列符號及代碼組成電子密碼進行簽名,來代替書寫簽名或印章,對于這種電子式的簽名還可進行技術驗證,其驗證的準確度是一般手工簽名和圖章的驗證而無法比擬的。"數(shù)字簽名"是目前電子商務、電子政務中應用最普遍、技術最成熟的、可操作性最強的一種電子簽名方法。它采用了規(guī)范化的程序和科學化的方法,用于鑒定簽名人的身份以及對一項電子數(shù)據(jù)內(nèi)容的認可。它還能驗證出文件的原文在傳輸過程中有無變動,確保傳輸電子文件的完整性、真實性和不可抵賴性。
數(shù)字簽名在ISO7498-2標準中定義為:"附加在數(shù)據(jù)單元上的一些數(shù)據(jù),或是對數(shù)據(jù)單元所作的密碼變換,這種數(shù)據(jù)和變換允許數(shù)據(jù)單元的接收者用以確認數(shù)據(jù)單元來源和數(shù)據(jù)單元的完整性,并保護數(shù)據(jù),防止被人(例如接收者)進行偽造"。美國電子簽名標準(DSS,F(xiàn)IPS186-2)對數(shù)字簽名作了如下解釋:"利用一套規(guī)則和一個參數(shù)對數(shù)據(jù)計算所得的結(jié)果,用此結(jié)果能夠確認簽名者的身份和數(shù)據(jù)的完整性"。按上述定義PKI(Public Key Infrastructino 公鑰基礎設施)提供可以提供數(shù)據(jù)單元的密碼變換,并能使接收者判斷數(shù)據(jù)來源及對數(shù)據(jù)進行驗證。
PKI的核心執(zhí)行機構是電子認證服務提供者,即通稱為認證機構CA(Certificate Authority),PKI簽名的核心元素是由CA簽發(fā)的數(shù)字證書。它所提供的PKI服務就是認證、數(shù)據(jù)完整性、數(shù)據(jù)保密性和不可否認性。它的作法就是利用證書公鑰和與之對應的私鑰進行加/解密,并產(chǎn)生對數(shù)字電文的簽名及驗證簽名。數(shù)字簽名是利用公鑰密碼技術和其他密碼算法生成一系列符號及代碼組成電子密碼進行簽名,來代替書寫簽名和印章;這種電子式的簽名還可進行技術驗證,其驗證的準確度是在物理世界中對手工簽名和圖章的驗證是無法比擬的。這種簽名方法可在很大的可信PKI域人群中進行認證,或在多個可信的PKI域中進行交*認證,它特別適用于互聯(lián)網(wǎng)和廣域網(wǎng)上的安全認證和傳輸。
“數(shù)字簽名”與普通文本簽名的最大區(qū)別在于,它可以使用個性鮮明的圖形文件,你只要利用掃描儀或作圖工具將你的個性簽名、印章甚至相片等,制作成BMP文件,就可以當做“數(shù)字簽名”的素材。
目前可以提供“數(shù)字簽名”功能的軟件很多,用法和原理都大同小異,其中比較常用的有“ OnSign”。安裝“OnSign”后,在Word、Outlook等程序的工具欄上,就會出現(xiàn),“OnSign”的快捷按鈕,每次使用時,需輸入自己的密碼,以確保他人無法盜用。
對于使用了“OnSign”寄出的文件,收件人也需要安裝“OnSign”或“OnSign Viewer”,這樣才具備了識別“數(shù)字簽名”的功能。根據(jù)“OnSign”的設計,任何文件內(nèi)容的竄改與攔截,都會讓簽名失效。因此當對方識別出你的“數(shù)字簽名”,就能確定這份文件是由你本人所發(fā)出的,并且中途沒有被竄改或攔截過。當然如果收件人還不放心,也可以單擊“數(shù)字簽名”上的藍色問號,“OnSign”就會再次自動檢查,如果文件有問題,“數(shù)字簽名”上就會出現(xiàn)紅色的警告標志。
在電子郵件使用頻繁的網(wǎng)絡時代,使用好“數(shù)字簽名”,就像傳統(tǒng)信件中的“掛號信”,無疑為網(wǎng)絡傳輸文件的安全又增加了一道保護屏障。
例子說明:
現(xiàn)在我們就轉(zhuǎn)入正題了。JAVA的數(shù)字簽名類封裝在Signature類(java.security.Signature)中。
接下來,我會編寫三個功能(即三個Java類):
a、生成一對密鑰,即私鑰和公鑰,對于密鑰的保存可以使用對象流的方式進行保存和傳送,也可以使用編碼的方式保存;在這里基于方便,我是使用編碼方式進行保存的;類名是:GenerateKeyPair.java
b、編寫發(fā)送者的功能:首先通過私鑰加密待輸出數(shù)據(jù)Data,并輸出Data和簽名后的Data;類名是:SignatureData.java
c、編寫接收者的功能:使用發(fā)送者的公鑰來驗證發(fā)送過來的加密Data,判斷簽名的合法性;類名是:VerifySignature.java
上期講述了pdf文檔的操作,這期講述對pdf進行電子簽章,公司的一個小業(yè)務,主要實現(xiàn) 1)線上登記學員信息 》2)線上付款 》 3)電子簽名 》4)生成帶有公司電子簽章的pdf收據(jù)
線上付款和電子簽名我會在后續(xù)章節(jié)講述,這期講述pdf電子簽章
一、申請電子印章
二、生成PKCS12證書
1. PKCS介紹
PKCS:The Public-Key Cryptography Standards (簡稱PKCS)是由美國RSA數(shù)據(jù)安全公司及其合作伙伴制定的一組公鑰密碼學標準,其中包括證書申請、證書更新、證書作廢表發(fā)布、擴展證書內(nèi)容以及數(shù)字簽名、數(shù)字信封的格式等方面的一系列相關協(xié)議。
到1999年底,PKCS已經(jīng)公布了以下標準:
PKCS#1:定義RSA公開密鑰算法加密和簽名機制,主要用于組織PKCS#7中所描述的數(shù)字簽名和數(shù)字信封[22]。
PKCS#3:定義Diffie-Hellman密鑰交換協(xié)議[23]。
PKCS#5:描述一種利用從口令派生出來的安全密鑰加密字符串的方法。使用MD2或MD5 從口令中派生密鑰,并采用DES-CBC模式加密。主要用于加密從一個計算機傳送到另一個計算機的私人密鑰,不能用于加密消息[24]。
PKCS#6:描述了公鑰證書的標準語法,主要描述X.509證書的擴展格式[25]。
PKCS#7:定義一種通用的消息語法,包括數(shù)字簽名和加密等用于增強的加密機制,PKCS#7與PEM兼容,所以不需其他密碼操作,就可以將加密的消息轉(zhuǎn)換成PEM消息[26]。
PKCS#8:描述私有密鑰信息格式,該信息包括公開密鑰算法的私有密鑰以及可選的屬性集等[27]。
PKCS#9:定義一些用于PKCS#6證書擴展、PKCS#7數(shù)字簽名和PKCS#8私鑰加密信息的屬性類型[28]。
PKCS#10:描述證書請求語法[29]。
PKCS#11:稱為Cyptoki,定義了一套獨立于技術的程序設計接口,用于智能卡和PCMCIA卡之類的加密設備[30]。
PKCS#12:描述個人信息交換語法標準。描述了將用戶公鑰、私鑰、證書和其他相關信息打包的語法[31]。
PKCS#13:橢圓曲線密碼體制標準[32]。
PKCS#14:偽隨機數(shù)生成標準。
PKCS#15:密碼令牌信息格式標準[33]。
PKCS12也就是以上標準的PKCS#12,主要用來描述個人身份信息
2、JAVA生成PKCS12證書并進行存貯
生成的文件keystore.cer和keystore.p12放在自己項目的配置文件中,后面調(diào)用。
三、電子簽章
2. 簽名工具類SignPdf
3. 然后在業(yè)務中調(diào)用即可。
有以下實現(xiàn)方式。
1、基本電子簽名
2、生物特征電子簽名
3、具有見證數(shù)字簽名的電子簽名
4、帶有個人數(shù)字簽名的電子簽名
5、合格的電子簽名
6、電子簽名平臺
/iknow-pic.cdn.bcebos.com/32fa828ba61ea8d37af95d03980a304e241f58d9"target="_blank"title="點擊查看大圖"class="ikqb_img_alink"/iknow-pic.cdn.bcebos.com/32fa828ba61ea8d37af95d03980a304e241f58d9?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto"esrc=""/
電子簽名是指數(shù)據(jù)電文中以電子形式所含、所附用于識別簽名人身份并表明簽名人認可其中內(nèi)容的數(shù)據(jù)。
通俗點說,電子簽名就是通過密碼技術對電子文檔的電子形式的簽名,并非是書面簽名的數(shù)字圖像化,它類似于手寫簽名或印章,也可以說它就是電子印章。電子簽名的用途:在電子版的中秋賀卡,結(jié)婚請?zhí)ㄖ贤虾灻?/p>
電子簽名并非是書面簽名的數(shù)字圖像化。它其實是一種電子代碼,利用它,收件人便能在網(wǎng)上輕松驗證發(fā)件人的身份和簽名。
它還能驗證出文件的原文在傳輸過程中有無變動。如果有人想通過網(wǎng)絡把一份重要文件發(fā)送給外地的人,收件人和發(fā)件人都需要首先向一個許可證授權CA(GlobalSign)申請一份電子許可證。這份加密的證書包括了申請者在網(wǎng)上的公共鑰匙即“公共電腦密碼”,用于文件驗證。
本文題目:電子簽名的java代碼,電子簽名的java代碼是什么
本文鏈接:http://www.chinadenli.net/article6/heooig.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供自適應網(wǎng)站、網(wǎng)站制作、響應式網(wǎng)站、App開發(fā)、網(wǎng)站設計公司、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)