1. 程式人生 > >DH實現加密演算法

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