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

JAVA中RSA的类

阅读更多
JAVA中RSA的类

别处摘的,先保存下来

package com.google.algorithm;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;

public class RSA
{
    public static void main(String[] args) throws NoSuchAlgorithmException, IOException, ClassNotFoundException
    {
        KeyPair pair = generateKeyPair();
        PrivateKey privateKey = pair.getPrivate();
        PublicKey publicKey = pair.getPublic();

        // Save Pirvate Key
        FileOutputStream f1 = new FileOutputStream("private.ppk");
        ObjectOutputStream b1 = new ObjectOutputStream(f1);
        b1.writeObject(privateKey);

        // Save Public Key
        FileOutputStream f2 = new FileOutputStream("public.ppk");
        ObjectOutputStream b2 = new ObjectOutputStream(f2);
        b2.writeObject(publicKey);

        encrypt();
       
        decrypt();

    }

    public static void encrypt() throws IOException, ClassNotFoundException
    {
        String msg = "Hello World!";

        FileInputStream f = new FileInputStream("public.ppk");
        ObjectInputStream b = new ObjectInputStream(f);
        RSAPublicKey pbk = (RSAPublicKey) b.readObject();

        // RSA算法是使用整数进行加密的,在RSA公钥中包含有两个整数信息:e和n。对于明文数字m,计算密文的公式是m的e次方再与n求模。
        BigInteger e = pbk.getPublicExponent();
        BigInteger n = pbk.getModulus();

        // 获取明文的大整数
        byte ptext[] = msg.getBytes("utf-8");
        BigInteger m = new BigInteger(ptext);

        // 加密明文
        BigInteger c = m.modPow(e, n);
       
        // 打印密文c
        System.out.println("c= " + c);
       
        // 将密文以字符串形式保存在文件中
        String cs = c.toString();
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("encrypt.dat"), "utf-8"));
        out.write(cs, 0, cs.length());
        out.close();

    }

    public static void decrypt() throws IOException, ClassNotFoundException
    {
        BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("encrypt.dat"), "utf-8"));
        String ctext = in.readLine();
        BigInteger c = new BigInteger(ctext);
       
        // 获取私钥
        FileInputStream f = new FileInputStream("private.ppk");
        ObjectInputStream b = new ObjectInputStream(f);
        RSAPrivateKey prk = (RSAPrivateKey) b.readObject();
       
        // 获取私钥的参数d,n
        BigInteger d = prk.getPrivateExponent();
        BigInteger n = prk.getModulus();
           
        // 解密明文
        BigInteger m = c.modPow(d, n);
       
       
        // 计算明文对应的字符串并输出。
        byte[] mt = m.toByteArray();
        System.out.println("PlainText is " + new String(mt, "utf-8"));
       
    }

    public static KeyPair generateKeyPair() throws NoSuchAlgorithmException
    {
        KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
        final int KEY_SIZE = 1024;
        keyPairGen.initialize(KEY_SIZE, new SecureRandom());
        KeyPair keyPair = keyPairGen.genKeyPair();
        return keyPair;
    }

}
分享到:
评论

相关推荐

    JAVA中RSA加密解密工具类

    在Java编程语言中,RSA(Rivest-Shamir-...总结来说,RSA加密解密工具类在Java中是一个重要的安全组件,用于保护数据的安全传输和存储。理解并正确使用RSA算法及其相关的Java API对于开发安全的网络应用程序至关重要。

    javarsa工具类

    在Java中,可以使用Java Cryptography Extension (JCE)框架来实现RSA操作。以下是一些关键类: 1. KeyPairGenerator:生成密钥对。 2. KeyPair:包含公钥和私钥。 3. Cipher:进行加密和解密操作。 示例代码: ```...

    .net 与Java间RSA加密的转换

    在.NET中,RSA加密通常使用`System.Security.Cryptography.RSACryptoServiceProvider`类,而在Java中,对应的类是`java.security.KeyPairGenerator`和`java.security.KeyPair`,以及用于加密和解密的`Cipher`类。...

    Java实现RSA生成公钥私钥

    在Java中实现RSA公钥和私钥的生成,通常我们会使用Java Cryptography Extension (JCE) 提供的API,如`java.security.KeyPairGenerator`类。但是,根据你的描述,这里提供的代码是不直接依赖API,而是通过数学计算来...

    PHP_JAVA_RSA互通加解密

    而在Java中,我们可以利用`java.security`包中的`KeyPairGenerator`,`PublicKey`,`PrivateKey`等类来生成和管理密钥,`Cipher`类则用于实际的加解密操作。 对于"PHP_JAVA_RSA互通加解密"项目,关键在于两个平台间...

    java_RSA2048加密解密.zip

    Java RSA2048加密解密技术是一种广泛应用于网络通信中的安全机制,它结合了非对称加密算法RSA和2048位的密钥长度,以提供强大的数据保护。在给定的“java_RSA2048加密解密.zip”压缩包中,包含了前后端实现RSA2048...

    java go RSA互相加解密

    java go RSA互相加解密 go rsa加密后可以用 java解密, java rsa加密后 可以用解密, 要把 txt文件中的秘钥和私钥 都复制粘贴到java 文件和go 文件 ,公钥和私钥统一才可以

    Java RSA加密 与.net 的密匙转换完整版,java类

    1. **生成RSA密钥对**:在Java中,我们可以使用`KeyPairGenerator`类的`generateKeyPair()`方法生成一对RSA密钥,包括一个公钥(PublicKey)和一个私钥(PrivateKey)。生成的密钥通常以X.509编码格式存储。 2. **...

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

    使用RSA非对称加密完成Java后端RSA加密和分段加解密,最近研究了RSA非对称加密,关于什么是RSA,网上各种文章一搜一大把,由于RSA的特性,一个1024位的密钥只能加密117位字节数据,当数据量超过117位字节的时候,程序...

    RSA-java.rar_RSA 类 java_rsa

    在这个"RSA-java.rar"压缩包中,我们很可能找到了一个关于如何在Java中使用RSA算法的示例或者工具类。 在Java中,RSA的实现主要依赖于`java.security`包下的类,如`KeyPairGenerator`用于生成密钥对,`KeyPair`用于...

    RSA在C#和java中的应用

    本篇将详细讲解RSA在C#和Java中的应用,以及如何实现公钥加密和私钥解密的过程。 在RSA算法中,每一对密钥由一个公钥和一个私钥组成。公钥可以公开,用于加密信息;而私钥必须保密,用于解密信息。这样的设计使得...

    RSA的jar包,js和RSA的java工具类

    这个压缩包包含与RSA相关的JAR包、JavaScript文件以及Java工具类,主要用于在JSP应用中实现密码的加密和解密。以下是对这些资源及其在实际应用中的作用的详细解释。 1. RSA算法原理: RSA基于数论中的大数因子分解...

    用Java实现RSA算法

    在Java中实现RSA算法,我们需要了解几个关键概念:公钥、私钥、模数、指数以及Java的Cipher类。 1. **RSA算法原理**: RSA的名字来源于它的发明者Ron Rivest、Adi Shamir和Leonard Adleman。该算法基于大整数因子...

    RSA加密JAVA转C# JAVA转PHP,C#转JAVA

    而C#中,RSA的实现则位于`System.Security.Cryptography`命名空间下,`RSACryptoServiceProvider`类是主要的实现类。PHP中,可以使用`openssl_pkey_new`函数生成密钥对,`openssl_public_encrypt`和`openssl_private...

    java-RSA.rar_Java实现RSA_java RSA_rsa java_rsa javascript_rsa加密算法

    在Java中实现RSA加密,主要涉及`java.security`和`javax.crypto`这两个包中的类。以下是一些关键步骤: 1. **生成密钥对**:使用`KeyPairGenerator`类,指定RSA算法,然后通过`generateKeyPair()`方法生成包含公钥...

    JAVA实现RSA加密

    JAVA 实现RSA的加解密算法,通过BASE64编码,密钥长度1024

    java实现RSA加密

    在Java中,可以使用`KeyPairGenerator`类生成密钥对。具体步骤如下: ```java // 创建KeyPairGenerator实例 KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); // 初始化KeyPairGenerator,指定密钥...

    javaRSA加密C++RSA解密

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

    Java 生成RSA密钥进行数据加密解密 支持超长字符分区

    首先,要生成RSA密钥对,可以使用Java的`java.security.KeyPairGenerator`类。以下是一个简单的示例: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security....

    java js RSA加密支持超长加密

    在Java和JavaScript中实现RSA加密,对于处理较长的数据至关重要,因为这两种语言的标准库默认的RSA加密只能处理相对较小的块。这里我们将深入探讨如何在Java和JavaScript中实现超长数据的RSA加密,并解决跨平台兼容...

Global site tag (gtag.js) - Google Analytics