java密钥交换算法DH定义与应用实例分析

网友投稿 197 2022-12-28


java密钥交换算法DH定义与应用实例分析

本文实例讲述了java密钥交换算法DH定义与应用。分享给大家供大家参考,具体如下:

一 对称加密缺点

密钥传递过程复杂,这是对称加密带来的困扰。

二 DH密钥交换算法特点

构建本地密钥

双方密钥一致

三 DH相关参数

四 DH算法实现过程

1、初始化发送方的密钥(KeyPairGenerator、KeyPair、PublicKey)

2、初始化接受方的密钥(KeyFactory、X509EncodedKeySpec、DHPublicKey、DHParameterSpec、KeyPairGenerator、PrivateKey)

3、密钥构建(KeyAgeement、SecretKey、KeyFactory、X509EncodeKeySpec、PublicKey)

4、加密和解密(Cipher)

五 DH代码实现过程

package com.imooc.security.dh;

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 javax.crypto.Cipher;

import javax.crypto.KeyAgreement;

import javax.crypto.SecretKey;

import javax.crypto.interfaces.DHPublIAJYXicKey;

import javax.crypto.spec.DHParameterSpec;

import org.apache.commons.codec.binary.Base64;

//import com.sun.org.apache.xalan.internal.utils.Objects;

public class ImoocDH {

private static String src = "cakin24 security dh";

public static void main(String[] args) {

jdkDH();

}

public static void jdkDH() {

try {

//1.初始化发送方密钥

KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");

senderKeyPairGenerator.initialize(512);

KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();

http:// 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 receiverKeyPairGenerator = KeyPairGenerator.getInstance("DH");

receiverKeyPairGenerator.initialize(dhParameterSpec);

KeyPair receiverKeypair = receiverKeyPairGenerator.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)) {

if(receiverDesKey.equals(senderDesKey)){

System.out.println("双方密钥相同");

}

//4.加密

Cipher cipher = Cipher.getInstance("DES");

cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);

byte[] result = cipher.doFinal(src.getBytes());

System.out.println("jdk dh encrypt : " + 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();

}

}

}

六 实现效果

双方密钥相同

jdk dh encrypt : wqnKvpQve05UD64OCQGXcQu5rcssEVSu

jdk dh decrypt : cakin24 security dh

七 应用场景

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):

http://tools.jb51.net/password/txt_encode

MD5在线加密工具:

http://tools.jb51.net/password/CreateMD5Password

在线散列/哈希算法加密工具:

http://tools.jb51.net/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:

http://tools.jb51.net/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:

http://tools.jb51.net/password/sha_encode

更多关于java相关内容感兴趣的读者可查看本站专题:《Java数学运算技巧总结》、《Java数据结构与算法教程》、《Java字符与字符串操作技巧总结》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网页版接口测试工具(网页版接口测试工具下载)
下一篇:新版微服务网关(微服务网关技术选型)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~