zoukankan      html  css  js  c++  java
  • RSA加密解密

    package utils;
    
    import javax.crypto.Cipher;
    import java.security.*;
    import java.security.interfaces.RSAPrivateKey;
    import java.security.interfaces.RSAPublicKey;
    import java.security.spec.PKCS8EncodedKeySpec;
    import java.security.spec.X509EncodedKeySpec;
    
    /**
     * RSA加密解密类
     */
    public class RSASecurityCode {
        // 非对称加密密钥算法
        private static final String ALGORITHM="RSA";
    
        // 密钥长度,用来初始化
        private static final int KEY_SIZE=1024;
    
        // 公钥
        private final byte[] publicKey;
    
        // 私钥
        private final byte[] privateKey;
    
        /**
         *
         * 构造函数,在其中生成公钥和私钥
         */
        public RSASecurityCode() throws Exception{
            // 得到密钥对生成器
            KeyPairGenerator kpg=KeyPairGenerator.getInstance(ALGORITHM);
            kpg.initialize(KEY_SIZE);
    
            // 得到密钥对
            KeyPair kp=kpg.generateKeyPair();
    
            // 得到公钥
            RSAPublicKey keyPublic=(RSAPublicKey)kp.getPublic();
            publicKey=keyPublic.getEncoded();
    
            // 得到私钥
            RSAPrivateKey keyPrivate=(RSAPrivateKey)kp.getPrivate();
            privateKey=keyPrivate.getEncoded();
        }
    
        /**
         *
         * 用公钥对字符串进行加密
         */
        public byte[] getEncryptArray(String originalString, byte[] publicKeyArray) throws Exception{
            // 得到公钥
            X509EncodedKeySpec keySpec=new X509EncodedKeySpec(publicKeyArray);
            KeyFactory kf=KeyFactory.getInstance(ALGORITHM);
            PublicKey keyPublic=kf.generatePublic(keySpec);
            // 加密数据
            Cipher cp=Cipher.getInstance(ALGORITHM);
            cp.init(Cipher.ENCRYPT_MODE, keyPublic);
            return cp.doFinal(originalString.getBytes());
        }
    
    
        /**
         *
         * 使用私钥进行解密
         */
        public String getDecryptString(byte[] encryptedDataArray) throws Exception{
            // 得到私钥
            PKCS8EncodedKeySpec keySpec=new PKCS8EncodedKeySpec(privateKey);
            KeyFactory kf=KeyFactory.getInstance(ALGORITHM);
            PrivateKey keyPrivate=kf.generatePrivate(keySpec);
            // 解密数据
            Cipher cp=Cipher.getInstance(ALGORITHM);
            cp.init(Cipher.DECRYPT_MODE, keyPrivate);
            byte[] arr=cp.doFinal(encryptedDataArray);
            // 得到解密后的字符串
            return new String(arr);
        }
    
        public byte[] getPublicKey() {
            return publicKey;
        }
    
        public static void main(String[] arr) throws Exception{
            String str="你好,世界! Hello,world!";
            System.out.println("准备用公钥加密的字符串为:"+str);
    
            // 用公钥加密
            RSASecurityCode rsaCoder=new RSASecurityCode();
            byte[] publicKey=rsaCoder.getPublicKey();
            byte[] encryptArray=rsaCoder.getEncryptArray(str, publicKey);
    
            System.out.print("用公钥加密后的结果为:");
            for(byte b:encryptArray){
                System.out.print(b);
            }
            System.out.println();
    
            // 用私钥解密
            String str1=rsaCoder.getDecryptString(encryptArray);
            System.out.println("用私钥解密后的字符串为:"+str1);
        }
    }

  • 相关阅读:
    寻找项目中顶级Vue对象 (一)
    vue文件中style标签的几个标识符
    vue中methods中的方法闭包缓存问题
    斐波那契数列实现
    ECMAScript 6 入门学习笔记(零)——开始
    Extjs6(三)——用extjs6.0写一个简单页面
    同域和不同域长啥样
    Extjs6组件——Form大家族成员介绍
    Extjs6官方文档译文——应用架构简介(MVC,MVVM)
    Extjs6(特别篇)——项目自带例子main.js拆分详解
  • 原文地址:https://www.cnblogs.com/zhouheblog/p/12883122.html
Copyright © 2011-2022 走看看