`

java RSA公钥加密,私钥解密算法例子

    博客分类:
  • Java
 
阅读更多
RSA算法原理 http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
"非对称加密算法"。
  (1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。
  (2)甲方获取乙方的公钥,然后用它对信息加密。
  (3)乙方得到加密后的信息,用私钥解密。

如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。公钥用于加密, 私钥用于解密.



原文:http://my.oschina.net/u/2284972/blog/525301
RSA 是一种非对称加密算法,一般很难破解,因此一些要求比较高的系统通常会采用rsa加密算法,一般来说用RSA加密有如下几个步骤.
1. 生成公钥与私钥
2. 用公钥对需要加密的字符串等进行加密
3. 在需要解密的地方,用私钥进行解密
下面对上面的几个部分贴出代码.

1. 生成公钥与私钥
package com.rsa;
import java.io.FileOutputStream; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.SecureRandom; 
import java.util.Date;

public class GenKeys {
    public static void main(String[] args) throws Exception {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); 
        SecureRandom secureRandom = new SecureRandom(new Date().toString().getBytes());
        keyPairGenerator.initialize(1024, secureRandom);
        KeyPair keyPair = keyPairGenerator.genKeyPair();
        String publicKeyFilename = "D:/publicKeyFile";
        byte[] publicKeyBytes = keyPair.getPublic().getEncoded();
        FileOutputStream fos = new FileOutputStream(publicKeyFilename); 
        fos.write(publicKeyBytes); 
        fos.close();
        String privateKeyFilename = "D:/privateKeyFile"; 
        byte[] privateKeyBytes = keyPair.getPrivate().getEncoded();
        fos = new FileOutputStream(privateKeyFilename); 
        fos.write(privateKeyBytes); 
        fos.close();
    }
}




2. 读取公钥方法
package com.rsa;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.security.PublicKey;
import java.security.spec.X509EncodedKeySpec;
import java.security.KeyFactory;

public class PublicKeyReader {    
    public static PublicKey get(String filename) throws Exception {
        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f); 
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int)f.length()]; 
        dis.readFully(keyBytes); 
        dis.close();
        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA"); 
        return kf.generatePublic(spec);
    }


}





3.读取私钥方法
package com.rsa;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
public class PrivateKeyReader {    
    public static PrivateKey get(String filename)throws Exception {
        File f = new File(filename);
        FileInputStream fis = new FileInputStream(f);
        DataInputStream dis = new DataInputStream(fis);
        byte[] keyBytes = new byte[(int)f.length()];
        dis.readFully(keyBytes);
        dis.close();
        PKCS8EncodedKeySpec spec =new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
      }

    
    public static void main(String[] args) throws Exception, InvalidKeySpecException, IOException {
        PrivateKeyReader.get("d:/privateKeyFile");
    }
}





4. 测试公钥加密,私钥解密

package com.rsa;

import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;

public class TestEncryptAndDecrypt {    
    public static void main(String[] args) throws Exception {
        String input = "thisIsMyPassword$7788";
        Cipher cipher = Cipher.getInstance("RSA");        
        RSAPublicKey pubKey = (RSAPublicKey) PublicKeyReader.get("d:/publicKeyFile");
        RSAPrivateKey privKey = (RSAPrivateKey) PrivateKeyReader.get("d:/privateKeyFile");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
        byte[] cipherText = cipher.doFinal(input.getBytes());
        //加密后的东西
        System.out.println("cipher: " + new String(cipherText));        
        //开始解密
        cipher.init(Cipher.DECRYPT_MODE, privKey); 
        byte[] plainText = cipher.doFinal(cipherText);
        System.out.println("plain : " + new String(plainText));
    }

}





查看结果:

程序代码 程序代码


cipher: J���
�nE��J�b9��CO��I�?�g[B{�w��u0����}�r6
�Q��Xa��ٝ�͊��N}n�]�@��_9!D��_�|k�ͪ&g�^��ɿ�XTa$�7��*�{7�R���v�S
plain : thisIsMyPassword$7788




说明加密解密成功。

备注,这里记录的只是测试方法,当然在实际使用过程中,可能还需要 对加密后的 byte[] 采用 base64 编码,转换成字符串存储起来,在解密的时候,先通过 base64 还原成 byte, 然后在解密,这样会更好。详细的方法,

可以参考这篇文章 :http://www.yihaomen.com/article/java/376.htm
分享到:
评论

相关推荐

    C# .net版 RSA 公钥加密私钥解密 私钥加密公钥解密

    本教程主要讲解如何在C# .NET环境中使用RSA进行公钥加密和私钥解密,以及私钥加密和公钥解密的操作。 首先,让我们了解RSA的基本原理。RSA算法基于两个大素数的乘积,这个乘积作为公钥,而这两个大素数作为私钥。...

    RSA算法JAVA公钥加密,C#私钥解密

    在这个示例中,"RSA加密"的压缩包可能包含了Java和C#的完整源代码,用于演示如何在两者之间实现RSA公钥加密和私钥解密的过程。开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。

    Java 公钥和私钥加密解密代码

    在非对称加密算法中,每一对密钥由一个公钥和一个私钥组成。公钥是公开的,可以被任何人获取,用于加密数据;而私钥则是保密的,只有密文的接收者拥有,用于解密数据。这种机制确保了即使加密的数据在传输过程中被...

    Java公钥加密私钥解密.rar

    这个名为"Java公钥加密私钥解密.rar"的压缩包文件包含了一个使用Java实现的公钥/私钥加密解密的示例。在这个案例中,开发者可能使用了Java的Java Cryptography Extension (JCE) 来实现RSA算法,这是一种非对称加密...

    Delphi RSA加解密【支持RSA公钥加密私钥解密,RSA私钥加密公钥解密,秘钥格式支持PKCS8和PKCS1】D7~XE10可用

    本文将详细讲解Delphi环境下如何实现RSA加解密,并着重讨论其支持的公钥加密私钥解密以及私钥加密公钥解密的功能,同时涉及PKCS8和PKCS1两种秘钥格式。 RSA是一种基于大数因子分解困难性的加密算法,由Ron Rivest、...

    支持rsa公钥加密私钥解密;支持rsa公钥解密私钥加密

    标题中提到的“支持rsa公钥加密私钥解密”是指使用RSA算法时的一种常见操作:用公钥加密数据,然后用私钥解密。这种模式通常发生在数据从发送方传输到接收方的过程中,确保即使数据在传输过程中被截获,攻击者也无法...

    Go-gorsa支持rsa公钥加密私钥解密;支持rsa公钥解密私钥加密

    "Go-gorsa"是一个专门为Go语言设计的安全库,它专注于RSA(Rivest-Shamir-Adleman)加密算法的实现,允许用户进行公钥加密和私钥解密,以及公钥解密和私钥加密的操作。这一特性使得gorsa在确保信息安全方面具有很高...

    C#RSA私钥加密公钥解密

    总的来说,这个项目展示了如何在C#中使用`System.Numerics.BigInteger`实现RSA加密算法,同时提供了私钥加密和公钥解密的功能,确保了数据的安全性。为了实际应用,你需要理解并掌握RSA算法的原理,以及如何在.NET...

    C++实现RSA公钥私钥加密算法

    RSA算法是一种非对称加密算法,它在信息...综上所述,C++实现RSA公钥私钥加密算法涉及了大数运算、素数检测、欧拉函数、模逆运算等多个数学和密码学概念。理解并实现这一算法有助于深入理解信息安全基础和加密技术。

    RSA生成公钥私钥和使用公钥私钥加密解密demo

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在数据加密、数字签名等方面。本示例提供了一个RSA加密工具类,用于生成公钥和私钥,并使用它们进行加密和解密操作,这对于保护数据库中的敏感...

    RAS公钥加密私钥解密的例子(加密文件)

    RSA算法是一种广泛应用于网络安全的非对称加密技术...总之,RSA公钥加密私钥解密是现代网络安全中的关键技术之一,它为数据的机密性和完整性提供了保障。理解并正确使用RSA算法对于任何IT专业人士来说都是至关重要的。

    Java实现RSA生成公钥私钥

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

    C# RSA 公钥加密,私钥解密

    总结来说,C#中的RSA公钥加密和私钥解密是通过RSACryptoServiceProvider类实现的,它为开发者提供了加密和解密的便捷接口。在VS2017这样的开发环境中,我们可以方便地构建这样的系统,确保数据在传输过程中的安全。

    JavaRSA生成公钥私钥加解密

    RSA是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其发明者的名字首字母命名。在Java中,我们可以使用Java Cryptography Extension (JCE) 提供的API来实现RSA的加解密。 首先,...

    使用公钥加密私钥解密原理

    在Java中,我们可以使用Java Cryptography Extension (JCE)框架来实现公钥加密和私钥解密。JCE提供了一系列接口和类,如KeyPairGenerator、KeyPair、PublicKey、PrivateKey等,用于生成密钥对、加密和解密数据。 ...

    RAS公钥加密私钥解密

    本文将深入探讨RSA公钥加密私钥解密的工作原理及其在Java和JavaScript中的实现。 RSA算法基于数论中的大数因子分解难题,它提供了一对密钥:公钥和私钥。公钥是可以公开的,用于加密数据;私钥必须保密,用于解密...

    Windows版 生成RSA公钥和私钥的工具

    数据使用公钥加密,只能用对应的私钥解密,反之亦然,确保了数据的安全性。 总结: 在Windows上生成RSA公钥和私钥,借助OpenSSL这个开源工具,过程简单而高效。确保妥善保管私钥,合理使用公钥,是实现数据安全传输...

    C# RSA加密、支持JAVA格式公钥私钥

    RSA算法是一种非对称加密算法,它在信息安全领域有着广泛的应用,特别是在网络通信中的数据加密和数字签名。C#和Java作为两种常见的编程语言,都提供了实现RSA算法的库和接口。这个压缩包中的内容看起来是针对C#环境...

    asp.net RSA 私钥加密公钥解密 能解 php Java 实现RSA加密互通

    首先,RSA是一种基于大素数因子分解困难性的公钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。它的核心在于一对密钥:公钥和私钥。公钥可以公开,用于加密数据;私钥则需要保密,用于解密数据...

    Java加密算法-公钥加密私钥解密

    RSA是最著名的公钥加密算法,基于大整数因子分解的困难性。 2. **Java加密API** Java提供了Java Cryptography Extension (JCE) API来处理加密操作。这个库包括了`javax.crypto`包,其中的`Cipher`类用于执行加密和...

Global site tag (gtag.js) - Google Analytics