当前位置:   article > 正文

Java实现非对称加密_java 非对称加密

java 非对称加密

1. 简介

        公开密钥密码学(英语:Public-key cryptography)也称非对称式密码学(英语:Asymmetric cryptography)是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥;公钥用作加密,私钥则用作解密。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开,必须由用户自行严格秘密保管,绝不透过任何途径向任何人提供,也不会透露给被信任的要通信的另一方。

        基于公开密钥加密的特性,它还能提供数字签名的功能,使电子文件可以得到如同在纸本文件上亲笔签署的效果。公开密钥基础建设透过信任数字证书认证机构的根证书、及其使用公开密钥加密作数字签名核发的公开密钥认证,形成信任链架构,已在TLS实现并在万维网的HTTP以HTTPS、在电子邮件的SMTP以SMTPS或STARTTLS引入。

        在现实世界上可作比拟的例子是,一个传统保管箱,开门和关门都是使用同一条钥匙,这是对称加密;而一个公开的邮箱,投递口是任何人都可以寄信进去的,这可视为公钥;而只有信箱主人拥有钥匙可以打开信箱,这就视为私钥。

        非对称加密过程:

        此流程图显示非对称加密过程是单向的,其中一条密钥加密后只能用相对应的另一条密钥解密。 

2. 非对称加密算法--DH(密钥交换)

密钥长度 默认 工作模式 填充方式 实现方
512~1024(64倍数) 1024 JDK

        DH加解密应用:   

  1. package com.bity.dh;
  2. import org.apache.commons.codec.binary.Base64;
  3. import javax.crypto.BadPaddingException;
  4. import javax.crypto.Cipher;
  5. import javax.crypto.IllegalBlockSizeException;
  6. import javax.crypto.KeyAgreement;
  7. import javax.crypto.NoSuchPaddingException;
  8. import javax.crypto.SecretKey;
  9. import javax.crypto.interfaces.DHPublicKey;
  10. import javax.crypto.spec.DHParameterSpec;
  11. import java.nio.charset.StandardCharsets;
  12. import java.security.InvalidAlgorithmParameterException;
  13. import java.security.InvalidKeyException;
  14. import java.security.KeyFactory;
  15. import java.security.KeyPair;
  16. import java.security.KeyPairGenerator;
  17. import java.security.NoSuchAlgorithmException;
  18. import java.security.PrivateKey;
  19. import java.security.PublicKey;
  20. import java.security.spec.InvalidKeySpecException;
  21. import java.security.spec.X509EncodedKeySpec;
  22. import java.util.Objects;
  23. import static java.lang.System.*;
  24. /**
  25. * <p>Title: JdkDh</p >
  26. * <p>Description: DH非对称算法实现 </p >
  27. * <p>Company: http://www.agree.com</p >
  28. * <p>Project: security</p >
  29. *
  30. * @author <a href="mailto:weiqi@agree.com.cn">WEIQI</a>
  31. * @version 1.0
  32. * @date 2022-04-27 19:51
  33. */
  34. public class JdkDh {
  35. private static final String SRC = "I'm DH encryption algorithm";
  36. public static void main(String[] args) {
  37. // 解决 Unsupported secret key algorithm: DES 异常
  38. System.getProperties().setProperty("jdk.crypto.KeyAgreement.legacyKDF", "true");
  39. jdkDh();
  40. }
  41. private static void jdkDh() {
  42. try {
  43. // 初始化发送方密钥
  44. KeyPairGenerator senderKeyPairGenerator = KeyPairGenerator.getInstance("DH");
  45. senderKeyPairGenerator.initialize(512);
  46. KeyPair senderKeyPair = senderKeyPairGenerator.generateKeyPair();
  47. // 发送方密钥,发送给接收方(可以通过文件、优盘、网络等...)
  48. byte[] senderPublicKeyEnc = senderKeyPair.getPublic().getEncoded();
  49. // 初始化接收方密钥,注意在实际环境中接收方和发送方肯定不会在一个函数中
  50. KeyFactory keyFactory = KeyFactory.getInstance("DH");
  51. X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(senderPublicKeyEnc);
  52. PublicKey receiverPublicKey &#
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号