`
byx5185
  • 浏览: 113193 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java RSA 加解密

    博客分类:
  • J2EE
阅读更多
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);

 

      }

}

8
0
分享到:
评论
1 楼 hotsmile 2013-12-19  
modules是啥?

相关推荐

    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是一种非对称加密算法,...

    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...

    PHP_JAVA_RSA互通加解密

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

    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