java 非对称加密RSA

package com.aarony.test;

import java.io.IOException;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.Cipher;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class EncryptionRSADemo2 {

    /**
     *
     * 此方法描述的是:解密密匙
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:44:38
     */
    public static byte[] privateEncrypt(byte[] bytes, PrivateKey privateKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        return cipher.doFinal(bytes);
    }

    /**
     *
     * 此方法描述的是:加密
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:44:47
     */
    public static byte[] publicEncrypt(byte[] bytes, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(bytes);
    }

    /**
     *
     * 此方法描述的是:解密base64 位的密钥
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:40:51
     */
    public static PrivateKey string2PrivateKey(String privateStr) throws Exception {
        byte[] bytes = base642byte(privateStr);
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(bytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePrivate(keySpec);
    }

    /**
     *
     * 此方法描述的是:解密base64 位的公钥
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:40:51
     */
    public static PublicKey string2PublicKey(String pubStr) throws Exception {
        byte[] bytes = base642byte(pubStr);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(bytes);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        return keyFactory.generatePublic(keySpec);
    }

    /**
     *
     * 此方法描述的是:生成keypair
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:35:43
     * @throws NoSuchAlgorithmException
     */
    public static KeyPair getKeyPair() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(512);
        return keyPairGenerator.generateKeyPair();
    }

    /**
     *
     * 此方法描述的是:获取公钥
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:37:13
     */
    public static String getPublicKey(KeyPair keyPair) {
        PublicKey key = keyPair.getPublic();
        return byte2base64(key.getEncoded());
    }

    /**
     *
     * 此方法描述的是:获取公钥
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:37:13
     */
    public static String getPrivateKey(KeyPair keyPair) {
        PrivateKey key = keyPair.getPrivate();
        return byte2base64(key.getEncoded());
    }

    /**
     *
     * 此方法描述的是:base64 解码
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:16:57
     */
    public static byte[] base642byte(String base64) throws IOException {
        BASE64Decoder decoder = new BASE64Decoder();
        return decoder.decodeBuffer(base64);
    }

    /**
     *
     * 此方法描述的是: base 64编码
     *
     * @author: Aarony
     * @version: 2018年6月20日 下午9:15:14
     */
    public static String byte2base64(byte[] bytes) {
        BASE64Encoder base = new BASE64Encoder();
        return base.encode(bytes);
    }
}

原文地址:https://www.cnblogs.com/wucaifang/p/9206261.html

时间: 2024-10-11 06:19:11

java 非对称加密RSA的相关文章

Java非对称加密算法--RSA加密算法

Java非对称加密算法--RSA加密算法          RSA加密算法是一种非对称加密算法.在公开密钥加密和电子商业中RSA被广泛使用.RSA是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.当时他们三人都在麻省理工学院工作.RSA就是他们三人姓氏开头字母拼在一起组成的. 1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相

Crypto++应用:非对称加密RSA

1,非对称加密RSA: (1)乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. (2)甲方获取乙方的公钥,然后用它对信息加密. (3)乙方得到加密后的信息,用私钥解密. 2,使用CryptoPP实现RSA: CryptoPP是一套非常完整的加密解密开源解决方案,如何使用这里就不多说了,请自行Google. #include "..\cryptopp562\randpool.h" #include "..\cryptopp562\osrng.h&

非对称加密RSA的C#实现

1.对称加密算法 对称加密是最快速.最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key). 对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中.对称加密通常使用的是相对较小的密钥, 一般小于256 bit.因为密钥越大,加密越强,但加密与解密的过程越慢.如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密, 不行的话就再用1解:但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密

JAVA 非对称加密算法RSA

非对称加密算法 RSA过程 : 以甲乙双方为例 1.初始化密钥 构建密钥对,生成公钥.私钥保存到keymap中 KeyPairGenerator ---> KeyPair --> RSAPublicKey.RSAPrivateKey 2.甲方使用私钥加密, 加密后在用私钥对加密数据进行数据签名,然后发送给乙方 RSACoder.encryptByPrivateKey(data, privateKey); RSACoder.sign(encodedData, privateKey); 3.乙方则

非对称加密RSA加密文件

RSA加密文件 关于RSA非对称加密很多地方都有讲解. 下面是AES AES 类 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.security.Key; import java.security.SecureRandom; impor

非对称加密RSA的应用及在C#中的实现

quote: http://www.cnblogs.com/happinessCodes/archive/2010/07/27/1786404.html 一说到数据的加密,常常会涉及到这几个单词:算法.原文.密文和密钥.通常,发送者把原文通过一个加密的算法,用密钥进行加密后将密文发送给接收者,然后接收者再用密钥对密文进行解密,得到原文.由于常用的加密算法都是公开的,所以,对原文的加密的关键,就是密钥了.对于这种加解密都使用同样的密钥的算法,我们称之为对称加密,对称加密的代表算法就是DES家族了.

加密算法之非对称加密RSA

一:非对称加密的由来 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准.RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥.RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作

Java 非对称加密

1 package test; 2 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 import java.security.Key; 8 import java.security.KeyPair; 9 import java.security.KeyPair

非对称加密——RSA算法工具类

关于RSA算法的介绍网上一大堆,一句话就是牛B. package com.demo; import org.springframework.util.StringUtils; import javax.crypto.Cipher; import java.security.*; import java.security.interfaces.RSAPrivateKey; import java.security.interfaces.RSAPublicKey; import java.secur