博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取私钥key对象
阅读量:2163 次
发布时间:2019-05-01

本文共 3426 字,大约阅读时间需要 11 分钟。

import com.sun.org.apache.xml.internal.security.utils.Base64;import org.apache.commons.io.FileUtils;import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import java.io.File;import java.nio.charset.Charset;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;public class RSAdemo {    public static void main(String[] args) throws Exception {        String input = "硅谷";        // 加密算法        String algorithm = "RSA";        PrivateKey privateKey = getPrivateKey("a.pri", algorithm);    }    public static PrivateKey getPrivateKey(String priPath,String algorithm) throws Exception{        // 将文件内容转为字符串        String privateKeyString = FileUtils.readFileToString(new File(priPath), Charset.defaultCharset());        // 获取密钥工厂        KeyFactory keyFactory = KeyFactory.getInstance(algorithm);        // 构建密钥规范 进行Base64解码        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(Base64.decode(privateKeyString));        // 生成私钥        return keyFactory.generatePrivate(spec);    }    /**     * 生成密钥对并保存在本地文件中     *     * @param algorithm : 算法     * @param pubPath   : 公钥保存路径     * @param priPath   : 私钥保存路径     * @throws Exception     */    private static void generateKeyToFile(String algorithm, String pubPath, String priPath) throws Exception {        // 获取密钥对生成器        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(algorithm);        // 获取密钥对        KeyPair keyPair = keyPairGenerator.generateKeyPair();        // 获取公钥        PublicKey publicKey = keyPair.getPublic();        // 获取私钥        PrivateKey privateKey = keyPair.getPrivate();        // 获取byte数组        byte[] publicKeyEncoded = publicKey.getEncoded();        byte[] privateKeyEncoded = privateKey.getEncoded();        // 进行Base64编码        String publicKeyString = Base64.encode(publicKeyEncoded);        String privateKeyString = Base64.encode(privateKeyEncoded);        // 保存文件        FileUtils.writeStringToFile(new File(pubPath), publicKeyString, Charset.forName("UTF-8"));        FileUtils.writeStringToFile(new File(priPath), privateKeyString, Charset.forName("UTF-8"));    }    /**     * 解密数据     *     * @param algorithm      : 算法     * @param encrypted      : 密文     * @param key            : 密钥     * @return : 原文     * @throws Exception     */    public static String decryptRSA(String algorithm,Key key,String encrypted) throws Exception{         // 创建加密对象        // 参数表示加密算法        Cipher cipher = Cipher.getInstance(algorithm);        // 私钥进行解密        cipher.init(Cipher.DECRYPT_MODE,key);        // 由于密文进行了Base64编码, 在这里需要进行解码        byte[] decode = Base64.decode(encrypted);        // 对密文进行解密,不需要使用base64,因为原文不会乱码        byte[] bytes1 = cipher.doFinal(decode);        System.out.println(new String(bytes1));        return new String(bytes1);    }    /**     * 使用密钥加密数据     *     * @param algorithm      : 算法     * @param input          : 原文     * @param key            : 密钥     * @return : 密文     * @throws Exception     */    public static String encryptRSA(String algorithm,Key key,String input) throws Exception{        // 创建加密对象        // 参数表示加密算法        Cipher cipher = Cipher.getInstance(algorithm);        // 初始化加密        // 第一个参数:加密的模式        // 第二个参数:使用私钥进行加密        cipher.init(Cipher.ENCRYPT_MODE,key);        // 私钥加密        byte[] bytes = cipher.doFinal(input.getBytes());        // 对密文进行Base64编码        System.out.println(Base64.encode(bytes));        return Base64.encode(bytes);    }}

 

转载地址:http://szfzb.baihongyu.com/

你可能感兴趣的文章
数据类型 java转换
查看>>
"NetworkError: 400 Bad Request - http://172.16.47.117:8088/rhip/**/####t/approval?date=976
查看>>
mybatis 根据 数据库表 自动生成 实体
查看>>
win10将IE11兼容ie10
查看>>
checkbox设置字体颜色
查看>>
第一篇 HelloWorld.java重新学起
查看>>
ORACLE表空间扩张
查看>>
orcal 循环执行sql
查看>>
web.xml配置监听器,加载数据库信息配置文件ServletContextListener
查看>>
结构型模式之桥接模式(Bridge)
查看>>
行为型模式之状态模式(State)
查看>>
行为型模式之策略模式(Strategy)
查看>>
行为型模式之模板方法模式(TemplateMethod)
查看>>
行为型模式之访问者模式(Visitor)
查看>>
大小端详解
查看>>
source insight使用方法简介
查看>>
<stdarg.h>头文件的使用
查看>>
C++/C 宏定义(define)中# ## 的含义 宏拼接
查看>>
Git安装配置
查看>>
linux中fork()函数详解
查看>>