數位簽章是數位訊息(資料)的非對稱加密雜湊。它是可以保證真實性, 不可否認性和完整性的值。換句話說, 這意味著你可以驗證發件人, 日期和時間以及郵件內容沒有被洩露或洩露。
注意:你可以參考這個連結為了更好地理解密碼術語。
數位簽章通常使用橢圓曲線密碼來計算, 尤其是在IoT裝置中, 但是我們將使用RSA進行演示。首先, 由於輸入訊息的速度和安全性, 我們將使用SHA-256獲取輸入訊息併為其建立雜湊, 然後使用非對稱金鑰對中的私鑰對該雜湊進行加密。另一方面, 接收方將使用公共金鑰對其進行解密, 並比較雜湊以確保它們確實相同。
數位簽章流程
讓我們使用演演算法SHA和RSA實現數位簽章, 並驗證雜湊是否與公鑰匹配。
方法:
通過傳遞兩個引數輸入訊息和私鑰, 建立一個名為Create_Digital_Signature()的方法來實現數位簽章。在此方法中, 我們將通過簽名演演算法獲取簽名物件的範例, 併為其分配私鑰, 最後通過輸入將返回位元組陣列。
public static byte[] Create_Digital_Signature(byte[] input, PrivateKey privateKey);
signature.initSign(privateKey);
signature.update(input);
下一步是使用RSA演演算法和SecureRandom類函數生成非對稱金鑰對。
SecureRandom secureRandom =new SecureRandom();
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
最後使用公鑰驗證簽名。 Verify_Digital_Signature()方法用於通過將輸入, 簽名和公鑰傳遞給簽名來檢查簽名是否匹配。
Signature signature = Signature.getInstance(SIGNING_ALGORITHM);
signature.initVerify(publickey);
signature.update(input);
例子:
輸入:msg =" GEEKSFORGEEEKS是電腦科學門戶"輸出:簽名值:80429D3FA203437B4098CAF774D96C827B6CC2489F437A82926DA2EFCE64EF68FB33235B9F6BA8E3B033235B9F6BA8驗證:true
下面是實現:
// Java implementation for Generating
// and verifying the digital signature
package java_cryptography;
// Imports
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import java.util.Scanner;
import javax.xml.bind.DatatypeConverter;
public class Digital_Signature_lsbin {
// Signing Algorithm
private static final String
SIGNING_ALGORITHM
= "SHA256withRSA" ;
private static final String RSA = "RSA" ;
private static Scanner sc;
// Function to implement Digital signature
// using SHA256 and RSA algorithm
// by passing private key.
public static byte [] Create_Digital_Signature(
byte [] input, PrivateKey Key)
throws Exception
{
Signature signature
= Signature.getInstance(
SIGNING_ALGORITHM);
signature.initSign(Key);
signature.update(input);
return signature.sign();
}
// Generating the asymmetric key pair
// using SecureRandom class
// functions and RSA algorithm.
public static KeyPair Generate_RSA_KeyPair()
throws Exception
{
SecureRandom secureRandom
= new SecureRandom();
KeyPairGenerator keyPairGenerator
= KeyPairGenerator
.getInstance(RSA);
keyPairGenerator
.initialize(
2048 , secureRandom);
return keyPairGenerator
.generateKeyPair();
}
// Function for Verification of the
// digital signature by using the public key
public static boolean
Verify_Digital_Signature(
byte [] input, byte [] signatureToVerify, PublicKey key)
throws Exception
{
Signature signature
= Signature.getInstance(
SIGNING_ALGORITHM);
signature.initVerify(key);
signature.update(input);
return signature
.verify(signatureToVerify);
}
// Driver Code
public static void main(String args[])
throws Exception
{
String input
= "lsbin IS A"
+ " COMPUTER SCIENCE PORTAL" ;
KeyPair keyPair
= Generate_RSA_KeyPair();
// Function Call
byte [] signature
= Create_Digital_Signature(
input.getBytes(), keyPair.getPrivate());
System.out.println(
"Signature Value:n "
+ DatatypeConverter
.printHexBinary(signature));
System.out.println(
"Verification: "
+ Verify_Digital_Signature(
input.getBytes(), signature, keyPair.getPublic()));
}
}
輸出如下:
更多電腦保安和演演算法相關內容請參考:lsbin - IT開發技術:https://www.lsbin.com/
檢視以下更多安全或演演算法相關的內容: