`
wlhok
  • 浏览: 56877 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

RSA加密解密操作

    博客分类:
  • Java
阅读更多

生成RSA密钥、保存到文件、从文件读取、加密、解密等操作。

java 代码
  1. import java.security.Key;   
  2. import java.security.KeyFactory;   
  3. import java.security.KeyPair;   
  4. import java.security.KeyPairGenerator;   
  5. import java.security.NoSuchAlgorithmException;   
  6. import java.security.PrivateKey;   
  7. import java.security.PublicKey;   
  8. import java.security.SecureRandom;   
  9. import java.security.interfaces.RSAPrivateKey;   
  10. import java.security.interfaces.RSAPublicKey;   
  11. import java.security.spec.InvalidKeySpecException;   
  12. import java.security.spec.PKCS8EncodedKeySpec;   
  13. import java.security.spec.X509EncodedKeySpec;   
  14. import javax.crypto.Cipher;   
  15. import org.apache.commons.configuration.ConfigurationException;   
  16. import org.apache.commons.configuration.PropertiesConfiguration;   
  17. import org.bouncycastle.jce.provider.BouncyCastleProvider;   
  18.   
  19. public class RSATest {   
  20.   
  21.     public static void main(String[] args) {   
  22.         try {   
  23.             RSATest encrypt = new RSATest();   
  24.             String encryptText = "encryptText";   
  25.   
  26.             // Generate keys   
  27.             KeyPair keyPair = encrypt.generateKey();   
  28.             RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();   
  29.             RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();   
  30.   
  31.             byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes());   
  32.             byte[] de = encrypt.decrypt(privateKey, e);   
  33.             System.out.println(toHexString(e));   
  34.             System.out.println(toHexString(de));   
  35.         } catch (Exception e) {   
  36.             e.printStackTrace();   
  37.         }   
  38.     }   
  39.   
  40.     public KeyPair generateKey() throws NoSuchAlgorithmException {   
  41.         KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");   
  42.         keyPairGen.initialize(1024new SecureRandom());   
  43.   
  44.         KeyPair keyPair = keyPairGen.generateKeyPair();   
  45.         return keyPair;   
  46.     }   
  47.   
  48.     public void saveKey(KeyPair keyPair, String publicKeyFile,   
  49.             String privateKeyFile) throws ConfigurationException {   
  50.         PublicKey pubkey = keyPair.getPublic();   
  51.         PrivateKey prikey = keyPair.getPrivate();   
  52.   
  53.         // save public key   
  54.         PropertiesConfiguration publicConfig = new PropertiesConfiguration(   
  55.                 publicKeyFile);   
  56.         publicConfig.setProperty("PULIICKEY", toHexString(pubkey.getEncoded()));   
  57.         publicConfig.save();   
  58.   
  59.         // save private key   
  60.         PropertiesConfiguration privateConfig = new PropertiesConfiguration(   
  61.                 privateKeyFile);   
  62.         privateConfig.setProperty("PRIVATEKEY",   
  63.                 toHexString(prikey.getEncoded()));   
  64.         privateConfig.save();   
  65.     }   
  66.   
  67.     /**  
  68.      * @param filename  
  69.      * @param type:  
  70.      *            1-public 0-private  
  71.      * @return  
  72.      * @throws ConfigurationException  
  73.      * @throws NoSuchAlgorithmException  
  74.      * @throws InvalidKeySpecException  
  75.      */  
  76.     public Key loadKey(String filename, int type)   
  77.             throws ConfigurationException, NoSuchAlgorithmException,   
  78.             InvalidKeySpecException {   
  79.         PropertiesConfiguration config = new PropertiesConfiguration(filename);   
  80.         KeyFactory keyFactory = KeyFactory.getInstance("RSA",   
  81.                 new BouncyCastleProvider());   
  82.   
  83.         if (type == 0) {   
  84.             // privateKey   
  85.             String privateKeyValue = config.getString("PULIICKEY");   
  86.             PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(   
  87.                     toBytes(privateKeyValue));   
  88.             PrivateKey privateKey = keyFactory.generatePrivate(priPKCS8);   
  89.             return privateKey;   
  90.   
  91.         } else {   
  92.             // publicKey   
  93.             String privateKeyValue = config.getString("PRIVATEKEY");   
  94.             X509EncodedKeySpec bobPubKeySpec = new X509EncodedKeySpec(   
  95.                     toBytes(privateKeyValue));   
  96.             PublicKey publicKey = keyFactory.generatePublic(bobPubKeySpec);   
  97.             return publicKey;   
  98.         }   
  99.     }   
  100.   
  101.     /**  
  102.      * Encrypt String.  
  103.      *   
  104.      * @return byte[]  
  105.      */  
  106.     protected byte[] encrypt(RSAPublicKey publicKey, byte[] data) {   
  107.         if (publicKey != null) {   
  108.             try {   
  109.                 Cipher cipher = Cipher.getInstance("RSA",   
  110.                         new BouncyCastleProvider());   
  111.                 cipher.init(Cipher.ENCRYPT_MODE, publicKey);   
  112.                 return cipher.doFinal(data);   
  113.             } catch (Exception e) {   
  114.                 e.printStackTrace();   
  115.             }   
  116.         }   
  117.         return null;   
  118.     }   
  119.   
  120.     /**  
  121.      * Basic decrypt method  
  122.      *   
  123.      * @return byte[]  
  124.      */  
  125.     protected byte[] decrypt(RSAPrivateKey privateKey, byte[] raw) {   
  126.         if (privateKey != null) {   
  127.             try {   
  128.                 Cipher cipher = Cipher.getInstance("RSA",   
  129.                         new BouncyCastleProvider());   
  130.                 cipher.init(Cipher.DECRYPT_MODE, privateKey);   
  131.                 return cipher.doFinal(raw);   
  132.             } catch (Exception e) {   
  133.                 e.printStackTrace();   
  134.             }   
  135.         }   
  136.   
  137.         return null;   
  138.     }   
  139.   
  140.     public static String toHexString(byte[] b) {   
  141.         StringBuilder sb = new StringBuilder(b.length * 2);   
  142.         for (int i = 0; i < b.length; i++) {   
  143.             sb.append(HEXCHAR[(b[i] & 0xf0) >>> 4]);   
  144.             sb.append(HEXCHAR[b[i] & 0x0f]);   
  145.         }   
  146.         return sb.toString();   
  147.     }   
  148.   
  149.     public static final byte[] toBytes(String s) {   
  150.         byte[] bytes;   
  151.         bytes = new byte[s.length() / 2];   
  152.         for (int i = 0; i < bytes.length; i++) {   
  153.             bytes[i] = (byte) Integer.parseInt(s.substring(2 * i, 2 * i + 2),   
  154.                     16);   
  155.         }   
  156.         return bytes;   
  157.     }   
  158.   
  159.     private static char[] HEXCHAR = { '0', '1', '2', '3', '4', '5', '6', '7',   
  160.             '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };   
  161.   
  162. }   

 

分享到:
评论

相关推荐

    C# RSA加密解密

    C#作为.NET框架下的主要编程语言,提供了丰富的类库支持RSA加密解密操作。本篇文章将深入探讨C#如何实现RSA加密解密,并结合Winform界面进行演示。 **1. RSA算法基础** RSA算法基于数论原理,包括大数因子分解的...

    RSA加密解密工具,用于文件的加密和解密* RSA加密解密:私钥解密,公钥加密

    在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...

    RSA加密解密(C#)实现

    RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....

    RSA加密解密网络课程设计

    RSA 加密解密网络课程设计 RSA 加密解密是计算机网络安全领域中的一种常用技术,旨在保护数据的机密性和完整性。本文将介绍 RSA 加密解密的基本原理、实现方法和技术要点。 一、RSA 加密解密原理 RSA 加密解密...

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

    RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...

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

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

    易语言调用JSEncrypt实现RSA加密解密

    在易语言中调用JSEncrypt库来实现RSA加密解密,可以为易语言的应用增加一层安全防护。 JSEncrypt是一个JavaScript库,由Benjamin van Ryseghem开发,主要用于RSA加密操作,特别适用于前端与后端之间的安全通信。它...

    Android RSA加密解密demo

    本示例"Android RSA加密解密demo"提供了一个完整的实现过程,帮助开发者理解如何在Android平台上使用RSA进行数据的加密和解密操作。 RSA算法基于数论,它的核心思想是利用两个大素数的乘积作为公钥,这两个大素数的...

    C++实现密码学 RSA加密解密算法

    RSA加密解密算法是密码学中一种常用的加密算法,以 Ron Rivest、Adi Shamir 和 Leonard Adleman 三人命名。该算法基于大数分解问题的困难性,使用公钥加密和私钥解密的方式来保护数据的安全。 该算法的基本原理是:...

    RSA加密解密的使用,含jsencrypt.js文件(uni-app也可用)

    RSA加密解密是一种广泛应用于网络安全中的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大数因子分解的困难性,为数据提供了一种安全的传输方式。 ...

    C++实现RSA加密解密算法

    以上就是关于RSA加密解密算法的基本知识,以及在VC++环境下实现的概述。理解并掌握RSA算法对于深入学习网络安全和密码学至关重要。在具体编程实现时,还需要考虑到错误处理、输入输出的格式化以及代码的优化等问题。

    RSA.zip_RSA 加密解密_rsa_rsa加密算法_rsa加密解密_rsa加密解密算法

    本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...

    C#RSA加密解密工具

    总的来说,C# RSA加密解密工具是一个实用的开发辅助工具,帮助开发者在C#环境中方便地实现RSA加密和解密操作,同时考虑到了与其他语言(如JavaScript和Java)的兼容性,提高了数据安全传输的灵活性和便利性。

    unity工具类RSA加密和解密

    本文将深入探讨RSA加密和解密的基础知识以及如何在Unity中实现这一功能。 首先,RSA加密的核心原理是基于大整数因子分解的困难性。它生成一对密钥:公钥和私钥。公钥可以公开,用于加密;而私钥必须保密,用于解密...

    RSA加密解密示例工程

    RSA加密解密示例工程是一个专门针对Android平台设计的学习资源,旨在帮助开发者深入理解并实践RSA加密算法。RSA,全称Rivest-Shamir-Adleman,是一种非对称加密技术,广泛应用于网络安全、数据保护等领域。该示例...

    rsa加密解密算法C语言代码

    RSA加密解密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,是目前应用最广泛的公钥加密技术之一。该算法基于大数因子分解的困难性,即在两个大素数已知的情况下容易计算它们的...

    JAVA实现RSA加密解密

    - **性能**:RSA加密解密速度较慢,不适合对大量数据进行直接操作,通常用于加密会话密钥等小量数据,然后用会话密钥加密大量数据(如使用AES)。 - **编码**:在处理字符串时,确保正确处理字符编码,避免数据丢失...

    swift-RSA加密解密

    **Swift中的RSA加密解密** RSA(Rivest-Shamir-Adleman)是一种广泛使用的非对称加密算法,它的核心特点在于使用一对密钥,一个为公钥,一个为私钥。在信息安全领域,这种特性使得RSA成为实现安全通信的重要工具。...

    Android使用RSA加密解密功能的实现Demo

    本教程将详细介绍如何在Android项目中实现RSA加密解密功能,并通过一个Demo来说明其具体步骤。 首先,我们需要了解RSA加密的基本原理。RSA是由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家于1977年提出的,...

    Delphi RSA加密解密代码

    采用OpenSSL进行RSA加密解密,对Delphi-OpenSSL进行重构。 1、支持公钥加密、解密,私钥加密解密。 2、支持PKCS1和PKCS8两种密钥格式。 3、支持PKCS#1 v1.5、PKCS#1 OAEP、SSL v2等填充方式。 4、支持生成密钥对。 5...

Global site tag (gtag.js) - Google Analytics