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
  • 相关阅读:
    洛谷 P2590 [ZJOI2008]树的统计
    如何让文件夹隐藏起来,保护自己的隐私
    SharePoint入门——创建一个网站
    SharePoint 解决管理员密码修改后各种问题的来袭
    .NET创建一个即是可执行程序又是Windows服务的程序
    C#——WebApi 接口参数传参详解
    C#中对Web.Config、App.Config字符串加密与解密的方法
    邮件服务器常用地址和端口信息
    Unity3d 5.x搭载VS2013使用
    系统性能优化- Session丢失
  • 原文地址:https://www.cnblogs.com/zhangzhiyong-/p/15012621.html
Copyright © 2011-2022 走看看