文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

java 中的非对称加密怎么利用DH方式实现

2023-05-31 07:45

关注

本篇文章为大家展示了java 中的非对称加密怎么利用DH方式实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

实现代码:

package com.sahadev;  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.commons.codec.binary.Hex;  public class DH {    public static String src = "Hello,sahadev!";    public static void main(String[] args) {     JDKDH();   }    public static void JDKDH() {     try {       // 初始化发送方密钥       KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");       senderKeyPairGenerator.initialize(512);       KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();       byte[] senderPublicKey = senderKeyPair.getPublic().getEncoded();        // 初始化接收方的密钥       KeyFactory instance = KeyFactory.getInstance("DH");       X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKey);       PublicKey sendPublicKeyTemp = instance.generatePublic(x509EncodedKeySpec);       DHParameterSpec dhParameterSpec = ((DHPublicKey) sendPublicKeyTemp).getParams();       KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("DH");       keyPairGenerator.initialize(dhParameterSpec);       // 接收方生成密钥       KeyPair generateKeyPair = keyPairGenerator.generateKeyPair();       byte[] receiverPublicKey = generateKeyPair.getPublic().getEncoded();       PrivateKey receiverPrivateKey = generateKeyPair.getPrivate();        // 接收方密钥构建       KeyAgreement receiverKeyAgreement = KeyAgreement.getInstance("DH");       receiverKeyAgreement.init(receiverPrivateKey);       receiverKeyAgreement.doPhase(senderKeyPair.getPublic(), true);       // 使用我的密钥和你的公钥生成密钥       SecretKey receiverDesKey = receiverKeyAgreement.generateSecret("DES");        // 发送方密钥构建       KeyFactory keyFactory = KeyFactory.getInstance("DH");       X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(receiverPublicKey);       PublicKey receiverPublicKeyTemp = keyFactory.generatePublic(x509EncodedKeySpec2);        // 发送方拿到接收方返回的公钥做本地密钥       KeyAgreement senderKeyAgreement = KeyAgreement.getInstance("DH");       senderKeyAgreement.init(senderKeyPair.getPrivate());       senderKeyAgreement.doPhase(receiverPublicKeyTemp, true);       // 使用你的密钥我的公钥进行构建       SecretKey senderDesKey = senderKeyAgreement.generateSecret("DES");        // 判断双方的本地密钥是否相同       if (Objects.equals(receiverDesKey, senderDesKey)) {         System.out.println("双方密钥相同");       }        // 加密       Cipher cipher = Cipher.getInstance("DES");       cipher.init(Cipher.ENCRYPT_MODE, senderDesKey);       byte[] result = cipher.doFinal(src.getBytes());       System.out.println("加密结果为 : " + Hex.encodeHexString(result));        // 解密       cipher.init(Cipher.DECRYPT_MODE, senderDesKey);       result = cipher.doFinal(result);       System.out.println("解密结果为 : " + new String(result));     } catch (Exception e) {       e.printStackTrace();     }    }  }

附上结果: 

双方密钥相同 DES : da1cc13d388423e82a110539414b1ec0 解密结果为 : Hello,sahadev!

上述内容就是java 中的非对称加密怎么利用DH方式实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯