//特定於演算法的,用於生成公鑰和私鑰對
keypairgenerator keygen = keypairgenerator.getinstance("dsa");
keygen.initialize(1024);
keypair key = keygen.generatekeypair();
// 將生成的金鑰對序列化到檔案
byte buffer = key.getprivate().getencoded();
buffer = base64.encodebase64(buffer);
fileoutputstream out = new fileoutputstream("d:/private_test");
out.write(buffer);
out.close();
out = new fileoutputstream("d:/public_test");
buffer = key.getpublic().getencoded();
buffer = base64.encodebase64(buffer);
out.write(buffer);
out.close();
數字簽名的驗證:
byte encodestr = str.getbytes();
//為應用程式提供數字簽名演算法功能,數字簽名用來保證數字資料的真實性和完整性
在所有演算法當中,數字簽名可以是 nist 標準的 dsa,它使用 dsa 和 sha-1。可以將使用 sha-1 訊息摘要演算法的 dsa 演算法可指定為 sha1withdsa。如果使用 rsa,對訊息摘要演算法將有多種選擇,因此,可以將簽名演算法指定為 md2withrsa、md5withrsa 或 sha1withrsa。沒有預設的演算法名稱,所以必須為其指定名稱。
用 signature 物件簽名資料或驗證簽名包括以下三個階段:
初始化,使用
根據初始化型別,這可更新要簽名或驗證的位元組。
簽署或驗證所有更新位元組的簽名。
signature sig = signature.getinstance("dsa");
//初始化此用於簽名的物件
sig.initsign(readprivatekey("d:/private_test"));
//更新要由位元組簽名或驗證的資料
sig.update(encodestr);
//返回所有已更新資料的簽名位元組。
byte signature = sig.sign();
// 初始化此用於驗證的物件。
sig.initverify(readpublickey("d:/public_test"));
sig.update(encodestr);
//驗證傳入的簽名
system.out.println(sig.verify(signature));
//讀取檔案,生成privatekey(使用金鑰工廠以便根據其編碼例項化 dsa 私鑰)
public static privatekey readprivatekey(string filepath) throws exception
//生成publickey
public static publickey readpublickey(string filepath) throws exception
數字簽名簽名概述
數字簽名的技術流程描述 1 傳送者使用摘要演算法對傳送資訊產生資訊摘要 2 傳送者使用自己的私鑰對資訊摘要進行簽名 3 傳送者將資訊本身和已簽名的摘要一起傳送出去 4 接收者使用相同的摘要演算法對資訊本身計算資訊摘要 5 接收者使用傳送者的公鑰對簽名的摘要就行驗籤,獲得資訊傳送者的資訊摘要 6 接收...
ndk簽名驗證 簽名校驗通過NDK實現
注 ndk的形式採用xposed無法攔截到。so為了確保呼叫方是自己的應用,呼叫的時候將應用的context傳入,通過context將應用的簽名拿出來,然後和so中定義好的簽名進行對比,如果一致則進行呼叫,如下 jint checksignature jnienv env,jobject thiz,...
數字信封 數字簽名
2019 08 06 19 51 51 數字簽名是用來表明資料傳送者身份的,有了簽名就說明這個資料是傳送都發出來的。為什麼?因為可以用你的公鑰開啟你的簽名資訊,獲取明文的hash值。數字信封,被公鑰加密後的對稱密碼被稱為數字信封,用於對稱金鑰的交換。數字證書,用來證明資料傳送者的身份的。為什麼能證明...