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
  • 相关阅读:
    POJ2516 构图+k次费用流
    POJ 1511 最短路径之和(spfa或dijkstra+heap)
    windows中配置mongodb
    原型设计
    Erlang的参考资源
    用Erlang实现递归查找文件
    list相关的习题
    springmvc基础知识
    汇编实验4
    实验3 转移指令跳转原理及其简单应用编程
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/15012621.html
Copyright © 2011-2022 走看看