DH實現加密演算法
1.新建一個java專案,裡面新建一個java類,將jar包加入,整體的框架如圖所示:
2.DH.java裡面的程式碼如下所示:
import java.security.KeyFactory; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java.security.spec.X509EncodedKeySpec; import java.util.Objects; import javax.crypto.Cipher; import javax.crypto.KeyAgreement; import javax.crypto.SecretKey; import javax.crypto.interfaces.DHPublicKey; import javax.crypto.spec.DHParameterSpec; import org.apache.tomcat.util.codec.binary.Base64; public class DH { private static String src = "mu rong fei fei 636"; public static void main(String[] args) { jdkDH(); } public static void jdkDH() { try { // 1.初始化傳送方金鑰 KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH"); // JDK8在下面的引數裡面只能寫1024,如果寫512就會報錯 senderKeyPairGenerator.initialize(1024); KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair(); byte[] senderPublicKeyEnc = senderKeyPair.getPublic().getEncoded(); // 2.初始化接收方的金鑰 KeyFactory receiverKeyFactory = KeyFactory.getInstance("DH"); X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc); PublicKey receiverPublicKey = receiverKeyFactory.generatePublic(x509EncodedKeySpec); DHParameterSpec dhParameterSpec = ((DHPublicKey) receiverPublicKey).getParams(); KeyPairGenerator receiverPairGenerator = KeyPairGenerator.getInstance("DH"); receiverPairGenerator.initialize(dhParameterSpec); KeyPair receiverKeyPair = receiverPairGenerator.generateKeyPair(); PrivateKey receiverPrivateKey = receiverKeyPair.getPrivate(); byte[] receiverPublicKeyEnc = receiverKeyPair.getPublic().getEncoded(); // 3.金鑰構建 KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH"); receiverKeyAgreement.init(receiverPrivateKey); receiverKeyAgreement.doPhase(receiverPublicKey, true); SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES"); KeyFactory senderKeyFactory = KeyFactory.getInstance("DH"); x509EncodedKeySpec = new X509EncodedKeySpec(receiverPublicKeyEnc); PublicKey senderPublicKey = senderKeyFactory.generatePublic(x509EncodedKeySpec); KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH"); senderKeyAgreement.init(senderKeyPair.getPrivate()); senderKeyAgreement.doPhase(senderPublicKey, true); SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES"); if (Objects.equals(receiverDesKey, senderDesKey)) { System.out.println("雙方金鑰相同"); } // 4.加密 Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, senderDesKey); byte[] result = cipher.doFinal(src.getBytes()); // 加入jar包之後要fix一下 System.out.println("jdk dh eccrypt:" + Base64.encodeBase64String(result)); // 5.解密 cipher.init(Cipher.DECRYPT_MODE, receiverDesKey); result = cipher.doFinal(result); System.out.println("jdk dh decrypt:" + new String(result)); } catch (Exception e) { e.printStackTrace(); } } }
3.執行程式碼得到如下結果:
相關推薦
DH實現加密演算法
1.新建一個java專案,裡面新建一個java類,將jar包加入,整體的框架如圖所示: 2.DH.java裡面的程式碼如下所示: import java.security.KeyFactory; import java.security.KeyPair; import
修改 OpenVPN 實現加密演算法的自動協商
由另一篇博中的分析可知,OpenVPN 中有兩個加解密通道。一條是標準的 SSL 協議通道,被 OpenVPN 用於協商自己所用的金鑰。這個通道的加密演算法當然也是通過 SSL 協議來進行協商的,可以通過 --tls-cipher 選項來進行配置。另一條是 OpenVPN 自己的加解密通道,用於交換實際的資
C++實踐(三):C++實現加密演算法AES
本篇主要講2015年寫的加密演算法。包括:AES,AES-CMAC,HMAC,基於RSA與HMAC的數字簽名演算法。當時大概寫了2天。哈哈! AES演算法 AES是一個對稱加密標準,用以取代DES的商業應用。其分組長度為128位,192位或者256位。
Java實現加密演算法
目錄: Base64 訊息摘要演算法 MD SHA MAC 對稱加密演算法 DES 3DES AES PBE 非對稱加密演算法 DH RSA ElGamal 數字簽名演算法 RSA DSA ECDSA 其它演算法 IDEA CRC Base64 public sta
DH、RSA與ElGamal非對稱加密演算法實現及應用
1.對稱加密與非對稱加密概述 關於對稱加密與非對稱加密的概念這裡不再多說,感興趣可以看下我之前的幾篇文章,下面說一說兩者的主要區別。 對稱加密演算法資料安全,金鑰管理複雜,金鑰傳遞過程複雜,存在金鑰洩露問題。 非對稱加密演算法強度複雜、安全性依賴於演算法與金鑰。但是由於演算法複雜,使得非對稱演算法加解密速度沒
Hbuilder開發app實戰-識歲05-Crypto.js實現各種js加密演算法
前言 js加密,應該說做js開發的很少接觸到這一塊,因為很多時候都是做加密,很少有前端做加密的, 很榮幸我接觸過兩次,找到了crypto.js,很好的東西,可以實現各種js加密。 吐槽 吐槽下前端做加密,一般來說前端做加密這需求是很少的,極少的, 我卻碰到了兩次,
安全不安全003:C#實現MD5加密演算法
MD5是一種資訊-摘要演算法,一種單向函式演算法(也就是HASH演算法)。將不同輸入長度的資訊進行雜湊計算,得到固定長度的輸出。它的主要特點是,不可逆 和唯一性。即不能由結果計算出輸入值;且不同的輸入值計算得到的固定長度輸出是唯一的。 目前使用的面向物件程式語言中,基本都有類庫實現好的MD5方法
AES加密演算法的java實現
在實現AES演算法的時候,其實步驟和我之前寫的那個DES加密演算法的差不多的 也是一樣,網上的基本都是基於一個內建好的字串進行加密,我這裡就新添加了一些新的功能 轉載使用的話,請註明一下哦! package function; import java.util.*; import ja
DES加密演算法的java實現(基於java類庫)
嗯嗯........這個是我新開的部落格上的第一篇的文章,這裡小白希望自己的技術能夠一天比一天好(p≧w≦q),加油! 好吧,現在來一個基於java類庫的DES加密演算法的實現吧~網上不少的程式碼要不執行有問題,要不就是簡簡單單內建一個固定的加密字串就簡單完事了。好吧,我承認我現在是為懶人服務
RSA加密演算法驗證(C#實現)
RSA演算法簡單原理介紹(節選於網路) 假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰: 隨意選擇兩個大的質數p和q,p不等於q,計算N=pq。 根據尤拉函式,求得r = (p-1)(q-1) 選擇一個小於 r
非對稱加密演算法:實現ssh免密碼登入
**描述:利用非對稱加密演算法,實現兩臺主機之間可以免密碼直接登入 ,如下圖:** 整個實驗的原理如下圖: 具體步驟如下: 1、先準備好實驗需要的環境(兩臺虛擬機器–A:192.168.72.73,B:192.168.72.23),此時,我們遠端登入主機B,
國密GMSM2 —— go語言實現國密SM2加密演算法
package main import ( "github.com/tjfoc/gmsm/sm2" "fmt" "encoding/hex" ) func main() { //生成私鑰 privateKey, e := sm2.GenerateKey() if e!=n
php實現封裝aes加密演算法,與前端互動
class AesSecurity { /** * method 為AES-128-CBC時 * @var string傳入要加密的明文 * 傳入一個16位元組的key * 傳入一個16位元組的初始偏移向量IV */ priv
jdk實現常見的加密演算法
Base64 內容加密 public static String encode(String str) { return Base64.getEncoder().encodeToString(str.getBytes()); } 解密 pub
CC++實現區塊鏈(上)之加密演算法
本演算法基於橢圓標準方程、線性代數、資料結構,純屬自制。僅供學習參考,不得用於商業用途。 首先了解下橢圓標準方程: 我們先模擬下長軸為Y軸時(即焦點F在Y軸上,F的橫座標為0的情況),然後根據橢圓的定義,得到橢圓上任意一點F,到焦點F1,F2的距離|MF1|+|MF2
Python實現RSA加密演算法
基本思路在這裡說一下: 設p、q為質數 n = p*q fn = (p-1)*(q-1) 要滿足: 1 < e < fn , 且 e 與 fn 互質 滿足: e*d%fn = 1 (d>1) e 為公鑰 , d 為私鑰 把e 和 n 發給 客戶端 m 為明文 c =
MD5加密演算法Golang實現
什麼是MD5? MD5訊息摘要演算法(Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位(16位元組)的雜湊值,用於確保資訊傳輸完整一致。MD5有MD4、MD3、MD2改進而來,主要增強演算法複雜度和不可逆性。MD5廣泛使用在為檔案傳
AES加密演算法的詳細介紹與實現
#include <stdio.h> #include <stdlib.h> #include <string.h> #include "aes.h" /** * S盒 */ static const int S[16][16] = { 0x63, 0
非對稱加密過程詳解(基於RSA非對稱加密演算法實現)
1、非對稱加密過程: 假如現實世界中存在A和B進行通訊,為了實現在非安全的通訊通道上實現資訊的保密性、完整性、可用性(即資訊保安的三個性質),A和B約定使用非對稱加密通道進行通訊,具體過程如下: 說明: 國內目前使用雙證書體系,即
RC4加密演算法的原理及實現
RC4於1987年提出,和DES演算法一樣,是一種對稱加密演算法,也就是說使用的金鑰為單鑰(或稱為私鑰)。但不同於DES的是,RC4不是對明文進行分組處理,而是位元組流的方式依次加密明文中的每一個位元組,解密的時候也是依次對密文中的每一個位元組進行解密。 R