`
zzc1684
  • 浏览: 1224098 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Java RSA 加解密

    博客分类:
  • RSA
阅读更多
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import javax.crypto.Cipher;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class RSAHelper
     /**
      * 得到公钥
      * @param key 密钥字符串(经过base64编码)
      * @throws Exception
      */
     public static PublicKey getPublicKey(String key) throws Exception {
           byte[] keyBytes;
           keyBytes = (new BASE64Decoder()).decodeBuffer(key);

           X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
           KeyFactory keyFactory = KeyFactory.getInstance("RSA");
           PublicKey publicKey = keyFactory.generatePublic(keySpec);
           return publicKey;
     }
     /**
      * 得到私钥
      * @param key 密钥字符串(经过base64编码)
      * @throws Exception
      */
     public static PrivateKey getPrivateKey(String key) throws Exception {
           byte[] keyBytes;
           keyBytes = (new BASE64Decoder()).decodeBuffer(key);

           PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
           KeyFactory keyFactory = KeyFactory.getInstance("RSA");
           PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
           return privateKey;
     }

     /**
      * 得到密钥字符串(经过base64编码)
      * @return
      */
     public static String getKeyString(Key key) throws Exception {
           byte[] keyBytes = key.getEncoded();
           String s = (new BASE64Encoder()).encode(keyBytes);
           return s;
     }
     public static void main(String[] args) throws Exception {

           KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
           //密钥位数
           keyPairGen.initialize(1024);
           //密钥对
           KeyPair keyPair = keyPairGen.generateKeyPair();
           // 公钥
           PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
           // 私钥
           PrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
           String publicKeyString = getKeyString(publicKey);
           System.out.println("public:n" + publicKeyString);
           String privateKeyString = getKeyString(privateKey);
           System.out.println("private:n" + privateKeyString);
           //加解密类
           Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");
           //明文
           byte[] plainText = "我们都很好!邮件:@sina.com".getBytes();
           //加密
           cipher.init(Cipher.ENCRYPT_MODE, publicKey);
       byte[] enBytes = cipher.doFinal(plainText);
//通过密钥字符串得到密钥
           publicKey = getPublicKey(publicKeyString);
           privateKey = getPrivateKey(privateKeyString);
           //解密
           cipher.init(Cipher.DECRYPT_MODE, privateKey);
           byte[]deBytes = cipher.doFinal(enBytes);
           publicKeyString = getKeyString(publicKey);
           System.out.println("public:n" +publicKeyString);
           privateKeyString = getKeyString(privateKey);
           System.out.println("private:n" + privateKeyString);
           String s = new String(deBytes);
           System.out.println(s);
     }

通过modulus public exponent private exponent生成 RSA Key

import java.math.BigInteger;

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.PublicKey;

import java.security.spec.RSAPrivateKeySpec;

import java.security.spec.RSAPublicKeySpec;

import javax.crypto.Cipher;

public class RsaKey {
     public PublicKey getPublicKey(String modulus,String publicExponent) throws Exception {
           BigInteger m = new BigInteger(modulus);

           BigInteger e = new BigInteger(publicExponent);

           RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m,e);

           KeyFactory keyFactory = KeyFactory.getInstance("RSA");

           PublicKey publicKey = keyFactory.generatePublic(keySpec);

           return publicKey;

     }
     public PrivateKey getPrivateKey(String modulus,String privateExponent) throws Exception {

           BigInteger m = new BigInteger(modulus);

           BigInteger e = new BigInteger(privateExponent);

           RSAPrivateKeySpec keySpec = new RSAPrivateKeySpec(m,e);

           KeyFactory keyFactory = KeyFactory.getInstance("RSA");

           PrivateKey privateKey = keyFactory.generatePrivate(keySpec);

           return privateKey;

     }
     public static void main(String[] args) throws Exception {

           String modulus = "10103166745709600780215616551837697832816413714471062522342538060943596036859967333870827790358555455232243383580565187280643159050869924436081447583051139";

           String publicExponent = "65537";
           String privateExponet = "367979294475011322800474185715497882523349856362702385535371444397399388741997039894583483410120364529325888461124714276674612930833020362278754665756193";
           RsaKey key = new RsaKey();
           PublicKey publicKey = key.getPublicKey(modulus, publicExponent);
           PrivateKey privateKey = key.getPrivateKey(modulus, privateExponet);

           //加解密类

           Cipher cipher = Cipher.getInstance("RSA");
     //明文

           byte[] plainText = "我们都很好!邮件:@sina.com".getBytes();
           //加密
           cipher.init(Cipher.ENCRYPT_MODE, publicKey);
       byte[] enBytes = cipher.doFinal(plainText);

       cipher.init(Cipher.DECRYPT_MODE, privateKey);

           byte[]deBytes = cipher.doFinal(enBytes);
     String s = new String(deBytes);
           System.out.println(s);

     }

}

 

分享到:
评论

相关推荐

    java RSA加密 解密

    Java RSA 加密解密 Java RSA 加密解密是指使用 Java 语言实现 RSA 加密和解密算法。RSA 是一种非对称加密算法,由 Ron Rivest、Adi Shamir 和 Leonard Adleman 三人于 1978 年共同发明。RSA 加密算法的安全性基于...

    Java RSA 加密解密

    在Java中实现RSA加解密,我们需要使用`java.security`包中的相关类。首先,我们需要生成一对公钥和私钥。这通常通过`KeyPairGenerator`类完成,指定算法为"RSA",然后通过`generateKeyPair()`方法生成包含公钥...

    java RSA加密解密

    Java RSA 加密解密是一种基于非对称加密算法的安全技术,广泛应用于数据传输、数字签名等领域。RSA(Rivest-Shamir-Adleman)由三位数学家命名,其核心原理是大整数因子分解的困难性。在Java中,我们可以使用Java ...

    Js Java Rsa 加密解密

    JavaScript、Java和RSA加密解密是信息安全领域中的关键技术,它们被广泛应用于数据传输、用户认证、Web应用安全等场景。RSA是一种非对称加密算法,以其发明者Ron Rivest、Adi Shamir和Leonard Adleman的名字命名,它...

    java Rsa 加解密示例

    Java RSA加解密是一种基于非对称加密算法的典型应用,广泛用于网络安全、数据保护等领域。RSA算法由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字命名。它利用了大整数因子分解的困难...

    javaRSA 加解密实现

    java rsa 加解密 包含界面,随机生成密钥

    Java实现的RSA加密解密算法示例

    Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...

    与Java的RSA加解密兼容的Python加解密库m2crypto(Windows下免编译)

    由于Java的RSA加解密一般都是用RSA/ECB/PKCS1PADDING,导致Python一般的RSA加密库的加解密结果与Java的不兼容,Python下目前能与之兼容的RSA的库目前发现的只有一个,就是m2crypto。 这个库目前的问题是在windows...

    javaRSA加密C++RSA解密

    Java OpenSSL生成的RSA公私钥进行数据加解密详细介绍 项目: JAVA生成的RSA的密文,通过C++来解密。 RSA这里就不多介绍了大家自己去看。 JAVA也是通过包来实现加密和解密的,那么我的C++是通过OPENSSL的库来实现的...

    java rsa加密解密程序

    Java RSA 加密解密程序是一种基于公钥/私钥对的加密算法,广泛应用于网络安全、数据保护和数字签名等领域。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出的,是公开密钥加密算法的鼻祖。在这个程序中...

    java RSA加解密 zip加解密, js MD5 SHA1 RSA加密

    本文将深入探讨Java中的RSA加解密、ZIP加密压缩以及JavaScript中的MD5、SHA1和RSA加密算法。这些技术在网络安全、数据传输、用户认证等多个领域中广泛应用。 首先,我们来看RSA加密算法。RSA是一种非对称加密算法,...

    PHP_JAVA_RSA互通加解密

    在PHP中,我们可以使用openssl扩展来实现RSA加解密。例如,`openssl_pkey_new()`函数用于生成密钥对,`openssl_public_encrypt()`和`openssl_private_decrypt()`分别用于加密和解密数据。而在Java中,我们可以利用`...

    Rsa加密解密.rar_RSA 加密解密_java rsa_rsa加密_rsa加密java_加密 解密

    在Java中实现RSA加密解密,需要使用Java Cryptography Extension (JCE)库。以下是使用RSA加密解密的基本步骤: 1. **生成密钥对**:首先,我们需要生成一对公钥和私钥。在Java中,`java.security.KeyPairGenerator`...

    Java实现RSA加解密工具类Demo

    Java实现RSA加解密工具类Demo是一个典型的非对称加密技术的应用示例,RSA是一种广泛使用的公开密钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它基于大数因子分解的困难性,提供了安全的...

    RSA加解密Java&Android;解决长度限制亲测可用idea

    在Java中,`java.security`和`javax.crypto`包提供了必要的接口和类来实现RSA加解密。例如,`KeyPairGenerator`用于生成公钥和私钥对,`Cipher`用于进行加解密操作。 在描述中提到的"解决长度限制",这是因为在RSA...

    JAVA实现RSA加密解密

    在Java中实现RSA加密解密,可以帮助开发者保护敏感信息,例如在网络传输过程中防止数据被窃取。 首先,了解RSA的工作原理至关重要。它基于两个大素数的乘积,生成一对密钥:公钥和私钥。公钥可以公开,用于加密信息...

    java_RSA加解密+RSA分段加解密.zip

    使用RSA非对称加密完成Java后端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,由于RSA的特性,一个1024位的密钥只能加密117位...下面就给出如何完成后端RSA加解密和分段加解密

    java RSA加解密的udf函数

    在Java中实现RSA加解密通常涉及到`java.security`和`javax.crypto`这两个包。 在提供的文件列表中,有两个关键文件:RSAUdf.java和KeyRSA.java。RSAUdf.java可能包含了自定义的用户定义函数(UDF),这些函数用于...

    javaweb使用rsa加密解密jar包

    使用rsa进行加密解密。前端使用js和公钥进行加密,后台使用java和私钥进行解密

    用javaRSA加密解密算法

    用JAVA实现RSA的解密和加密的算法。~亲测可以运行

Global site tag (gtag.js) - Google Analytics