JAVA上加密演算法的實現用例(2)
JAVA上加密演算法的實現用例(2)
新增要簽名的資訊
public final byte[] sign()
throws SignatureException
返回簽名的陣列,前提是initSign和update
public final void initVerify(PublicKey publicKey)
throws InvalidKeyException
JAVA工程師介紹,用指定的公鑰初始化
引數:publicKey 驗證時用的公鑰
public final boolean verify(byte[] signature)
throws SignatureException
驗證簽名是否有效,前提是已經initVerify初始化
引數: signature 簽名陣列
*/
import Java.security.*;
import java.security.spec.*;
public class testdsa {
public static void main(String[] args) throws
java.security.NoSUChAlgorithmException,java.lang.Exception {
testdsa my=new testdsa();
my.run();
}
public void run()
{
//數字簽名生成金鑰
//第一步生成金鑰對,假如已經生成過,本過程就可以跳過,對使用者來講myprikey.dat要儲存在本地
//而mypubkey.dat給釋出給其它使用者
if ((new java.io.File(quot;myprikey.datquot;)).exists()==false) {
if (generatekey()==false) {
System.out.println(quot;生成金鑰對敗quot;);
return;
};
}
//第二步,此使用者
//從檔案中讀入私鑰,對一個字串進行簽名後儲存在一個檔案(myinfo.dat)中
//並且再把myinfo.dat傳送出去
//為了方便數字簽名也放進了myifno.dat檔案中,當然也可分別傳送
try {
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new
java.io.FileInputStream(quot;myprikey.datquot;));
PrivateKey myprikey=(PrivateKey)in.readObject();
in.close();
// java.security.spec.X509EncodedKeySpec pubX509=new
java.security.spec.X509EncodedKeySpec(bX509);
//java.security.spec.X509EncodedKeySpec
pubkeyEncode=java.security.spec.X509EncodedKeySpec
String myinfo=quot;這是我的資訊quot;; //要簽名的資訊
//用私鑰對資訊生成數字簽名
java.security.Signature
signet=java.security.Signature.getInstance(quot;DSAquot;);
signet.initSign(myprikey);
signet.update(myinfo.getBytes());
byte[] signed=signet.sign(); //對資訊的數字簽名
System.out.println(quot;signed(簽名內容)=quot;+byte2hex(signed));
//把資訊和數字簽名儲存在一個檔案中
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new
java.io.FileOutputStream(quot;myinfo.datquot;));
out.writeObject(myinfo);
out.writeObject(signed);
out.close();
System.out.println(quot;簽名並生成檔案成功quot;);
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println(quot;簽名並生成檔案失敗quot;);
};
//第三步
//其他人通過公共方式得到此戶的公鑰和檔案
//其他人用此戶的公鑰,對檔案進行檢查,假如成功說明是此使用者釋出的資訊.
//
try {
java.io.ObjectInputStream in=new java.io.ObjectInputStream(new
java.io.FileInputStream(quot;mypubkey.datquot;));
PublicKey pubkey=(PublicKey)in.readObject();
in.close();
System.out.println(pubkey.getFormat());
in=new java.io.ObjectInputStream(new
java.io.FileInputStream(quot;myinfo.datquot;));
String info=(String)in.readObject();
byte[] signed=(byte[])in.readObject();
in.close();
java.security.Signature
signetcheck=java.security.Signature.getInstance(quot;DSAquot;);
signetcheck.initVerify(pubkey);
signetcheck.update(info.getBytes());
if (signetcheck.verify(signed)) {
System.out.println(quot;info=quot;+info);
System.out.println(quot;簽名正常quot;);
}
else System.out.println(quot;非簽名正常quot;);
}
catch (java.lang.Exception e) {e.printStackTrace();};
}
//生成一對檔案myprikey.dat和mypubkey.dat---私鑰和公鑰,
//公鑰要使用者傳送(檔案,網路等方法)給其它使用者,私鑰儲存在本地
public boolean generatekey()
{
try {
java.security.KeyPairGenerator
keygen=java.security.KeyPairGenerator.getInstance(quot;DSAquot;);
// SecureRandom secrand=new SecureRandom();
// secrand.setSeed(quot;ttttquot;.getBytes()); //初始化隨機產生器
// keygen.initialize(576,secrand); //初始化金鑰生成器
keygen.initialize(512);
KeyPair keys=keygen.genKeyPair();
// KeyPair keys=keygen.generateKeyPair(); //生成金鑰組
PublicKey pubkey=keys.getPublic();
PrivateKey prikey=keys.getPrivate();
java.io.ObjectOutputStream out=new java.io.ObjectOutputStream(new
java.io.FileOutputStream(quot;myprikey.datquot;));
out.writeObject(prikey);
out.close();
System.out.println(quot;寫入物件 prikeys okquot;);
out=new java.io.ObjectOutputStream(new
java.io.FileOutputStream(quot;mypubkey.datquot;));
out.writeObject(pubkey);
out.close();
System.out.println(quot;寫入物件 pubkeys okquot;);
System.out.println(quot;生成金鑰對成功quot;);
return true;
}
catch (java.lang.Exception e) {
e.printStackTrace();
System.out.println(quot;生成金鑰對失敗quot;);
相關文章
- Linux 程式設計之JAVA上加密演算法的實現用例(轉)Linux程式設計Java加密演算法
- AES加密演算法的JAVA實現加密演算法Java
- QQ TEA加密演算法 JAVA實現加密演算法Java
- java 實現 DES加密 解密演算法Java加密解密演算法
- Java中Blowfish加密演算法實現Java加密演算法
- Blowfish 加密演算法 Java 版簡單實現加密演算法Java
- 用vb實現DES加解密演算法(二)--加密 (轉)解密演算法加密
- 【Java】跳躍表的實現以及用例測試Java
- 用 Java 實現的八種常用排序演算法Java排序演算法
- [2]十道演算法題【Java實現】演算法Java
- AES加密 – iOS與Java的同步實現加密iOSJava
- Hanlp分詞例項:Java實現TFIDF演算法HanLP分詞Java演算法
- java MD5 加密實現Java加密
- java使用DES加密方式,實現對資料的加密解密Java加密解密
- java 單例的實際應用Java單例
- Java 實現單例的難點Java單例
- v2ray實現偽加密加密
- 【JS 逆向百例】醫保局 SM2+SM4 國產加密演算法實戰JS加密演算法
- 用java+ftp實現檔案上傳的問題?JavaFTP
- PHP 實現 Base64 加密演算法PHP加密演算法
- IDEA資料加密演算法實現Idea加密演算法
- 一種適用於RFID讀寫器的加密演算法及其實現加密演算法
- DES/3DES/AES 三種對稱加密演算法在 Java 中的實現3D加密演算法Java
- 單例模式的 Java 實現與思考單例模式Java
- java單例的幾種實現方法Java單例
- 用Rust實現單例Rust單例
- 使用Java加密與解密實現步驟Java加密解密
- java實現DES資料加密與解密Java加密解密
- Android 用Retrofit 2實現多檔案上傳實戰Android
- 用 Java 實現常見的 8 種內部排序演算法Java排序演算法
- 在SQL SERVER中實現RSA加密演算法SQLServer加密演算法
- 一文帶你學會國產加密演算法SM4的java實現方案加密演算法Java
- 排序演算法 Java實現排序演算法Java
- 排序演算法Java實現排序演算法Java
- java實現Bitmap演算法Java演算法
- KMP演算法 Java實現KMP演算法Java
- Java 實現單例模式的 9 種方法Java單例模式
- 單例模式的各種實現方式(Java)單例模式Java