數字簽名校驗

2021-06-13 18:37:30 字數 1677 閱讀 8333

//特定於演算法的,用於生成公鑰和私鑰對

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值。數字信封,被公鑰加密後的對稱密碼被稱為數字信封,用於對稱金鑰的交換。數字證書,用來證明資料傳送者的身份的。為什麼能證明...