• java实现RSA非对称加密


      最近在项目中需要用到RSA加密,特此记录一下。

      首先需要生成一个用来加解密的秘钥对,包括一个秘钥和一个公钥,这里采用的是Java生成的,一般生产用的秘钥对都会采用专用的openSSL生成。

      代码如下:

    public static void main(String[] args) throws Exception {
                    
            //1.初始化秘钥对   也可以使用openssl生成 秘钥对
            KeyPairGenerator rsa = KeyPairGenerator.getInstance("RSA");
            rsa.initialize(512);
            KeyPair keyPair = rsa.generateKeyPair();
            PrivateKey privateKey = keyPair.getPrivate();//私钥
            PublicKey publicKey = keyPair.getPublic();//公钥
            
            System.out.println("私钥串:"+Hex.encodeHexString(privateKey.getEncoded()));
            System.out.println("公钥串:"+Hex.encodeHexString(publicKey.getEncoded()));
            
            //2.进行签名
            String content = "加密内容";
            
            PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(privateKey.getEncoded());
            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
            
            PrivateKey privateKey1 = keyFactory.generatePrivate(spec);//真正用来加密的私钥
            
            Signature signature = Signature.getInstance("MD5withRSA");
            signature.initSign(privateKey1);
            signature.update(content.getBytes());
            
            byte[] res = signature.sign();
            System.out.println("签名后的content:" + Hex.encodeHexString(res));
            
            //3.验签
            X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey.getEncoded());
            keyFactory = KeyFactory.getInstance("RSA");
            PublicKey publicKey1 = keyFactory.generatePublic((x509EncodedKeySpec));
            
            signature = Signature.getInstance("MD5withRSA");
            signature.initVerify(publicKey1);
            signature.update(content.getBytes());
            boolean verify = signature.verify(res);
            
            System.out.println("验签结果:" + verify);
        
        }
    

      其中Signature签名的算法,常用的有:

    • MD5withRSA
    • SHA1withRSA
    • SHA256withRSA
  • 相关阅读:
    【java学习笔记】反射基础
    【java学习笔记】线程
    【java学习笔记】Properties
    【java学习笔记】序列化、反序列化
    Java Review (二十六、集合----- Set 集合)
    Java Review (二十五、集合----- Iterator接口)
    Java Review (二十四、集合-----Collection 接口)
    Java Review (二十三、集合-----概述)
    Java Review (二十二、正则表达式)
    Java Review (二十一、基础类库----日期、时间类)
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/15012621.html
Copyright © 2020-2023  润新知