zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    大龄程序员肉翻记录【一】
    spring boot 在不同环境下读取不同配置文件的一种方式
    JDK的一个关于stack的小bug
    《DISTRIBUTED SYSTEMS Concepts and Design》读书笔记 一
    一个简单的任务执行引擎设计
    spring集成guava的event bus
    Unity输出文件在itunes读取
    MaxScript调用DotNet时命名空间的问题
    max渲染通道元素的范例
    Unity里vertexShader里压扁模型来实现比较low的阴影
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/15012621.html
Copyright © 2011-2022 走看看