`
seavers
  • 浏览: 173962 次
  • 来自: ...
社区版块
存档分类
最新评论

java rsa code

    博客分类:
  • java
阅读更多
package 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 RSAUtil {
	public static String[] initKey() 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);  
        return new String[]{publicKeyString, privateKeyString};
	}
	
	public static String encode(String data, String publicKey) throws Exception {
        //加解密类  
        Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");  
        cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKey));  

        //加密  
        byte[] enBytes = cipher.doFinal(data.getBytes("UTF-8"));  
        return new BASE64Encoder().encode(enBytes);
	}
	
	public static String decode(String data, String privateKey) throws Exception {
        //加解密类  
        Cipher cipher = Cipher.getInstance("RSA");//Cipher.getInstance("RSA/ECB/PKCS1Padding");  
        cipher.init(Cipher.DECRYPT_MODE, getPrivateKey(privateKey));  

        //加密  
        byte[] deBytes = new BASE64Decoder().decodeBuffer(data);
        byte[] enBytes = cipher.doFinal(deBytes);  
        return new String(enBytes, "UTF-8");
	}	
	
   
      /** 
       * 得到公钥 
       * @param key 密钥字符串(经过base64编码) 
       * @throws Exception 
       */  
      private 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 
       */  
      private 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 
       */  
      private 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 {  
          //明文  
          String plainText = "很好!hello world";  
          String[] keys = initKey();
          
          System.out.println(encode(plainText, keys[0]));
          System.out.println(decode(encode(plainText, keys[0]), keys[1]));
   
      }  
   
}  
分享到:
评论

相关推荐

    .net与java中的互操作(rsa签名与验签、加密与解密)

    在`demoCode`文件中,你应该能找到实现这些操作的具体C#和Java代码。这些代码演示了.NET与Java间如何正确地进行RSA签名验证和加密解密。确保在实际应用中,安全地处理和存储密钥,遵循最佳实践,以防止密钥泄露导致...

    用Java语言实现RSA加密算法

    public class RSA_Code { // 类变量声明 } ``` #### 质数生成 ```java public static void create_prime() { do { prim_1 = BigInteger.probablePrime(10, new Random()).intValue(); prim_2 = BigInteger....

    Java-DES.zip_Java-DES_des_des in java_java des_rsa des java code

    Java DES(Data Encryption Standard)是一种广泛使用的对称加密算法,主要用在数据的加密与解密上。在Java中,可以使用javax.crypto包中的类来实现DES算法。本压缩包包含的是Java环境下DES算法的实现源代码,对于...

    RSA公共类.zip

    在实际应用中,RSA常与其他算法如HMAC(Hash-based Message Authentication Code)结合使用,以提供消息完整性检查。同时,由于RSA加密速度相对较慢,通常用于加密小量数据(如密钥交换),而非大量数据的直接加密。...

    java_code.rar_java 加密解密_java_code.rar_加密解密_字符串 加密 解密_对 字符串 加密 解密

    本项目“java_code.rar”聚焦于Java实现的字符串加密解密技术,旨在提供一个实用的解决方案来保护敏感信息。 首先,我们需要理解加密和解密的基本概念。加密是将明文(可读信息)转化为密文(不可读信息)的过程,...

    RSA.rar_rsa 1024_rsa 1024 java_rsa CRT_shamir_tu

    Its problems in decryption are optimized using rsa variants like crt rsa, multiprime rsa, rebalanced rsa and rprime rsa. U should give the no. of bits to be 1024 and check it on netbeans 6.5 or later...

    Encrypt-Decrypt-File-RSA-master_rsajava_

    描述中的"Code for RSA encryp and decryp"确认了这个项目的核心功能是实现RSA加密和解密的代码。在实际应用中,RSA加密通常用于保护敏感数据,例如密码、个人信息或者金融交易信息,因为它提供了一种方式,使得只有...

    java多种加密解密算法:SHA算法,HMAC算法,DES算法,PBE算法,AES算法,RSA算法,数字签名,D-H算法

    本文将深入探讨Java中常见的几种加密解密算法:SHA算法、HMAC算法、DES算法、PBE算法、AES算法、RSA算法、数字签名以及D-H算法。 1. SHA(Secure Hash Algorithm)算法: SHA是一种散列函数,它能将任意长度的输入...

    The Laws of Cryptography with Java Code.pdf

    书中还提供了大量的Java代码示例,用于演示各种加密算法和技术的具体实现方式。这些代码不仅有助于加深理解,也是学习Java编程的宝贵资源。 #### 四、附录 - **附录A:使用打印对数表** 介绍了如何利用对数表简化...

    用Java加密类实现DES、RSA及SHA的加密算法

    提到的文件列表中包含的"codefans.net"可能是指一个包含相关代码示例的资源,通常这些示例会详细展示如何在Java程序中实现上述加密算法。通过阅读和学习这些代码,可以更直观地了解如何在实际项目中应用加密技术。 ...

    基于java的用Java加密类实现DES、RSA及SHA的加密算法.zip

    本资源"基于java的用Java加密类实现DES、RSA及SHA的加密算法.zip"正是聚焦于利用Java语言实现三种主流的加密算法:DES(Data Encryption Standard)、RSA(Rivest-Shamir-Adleman)和SHA(Secure Hash Algorithm)。...

    Java Cryptography and code

    通过阅读《Java Cryptography and code》这本书,开发者可以学习如何在实际项目中应用这些概念,书中应该包含了丰富的示例代码,帮助读者更好地理解Java加密API的使用方法和最佳实践。对于那些希望增强其应用程序...

    RSA.rar_RSA 界面_bcprov-jdk14-123.jar_org.bouncycastle_rsa_rsa jav

    这个RAR压缩包包含了RSA算法在Java环境下的实现,且具有图形用户界面(GUI)。为了运行这个程序,你需要bcprov-jdk14-123.jar库,这是Bouncy Castle提供的一个开源Java加密库,它提供了许多扩展的加密功能,包括对...

    Java_ecc_code.zip

    Java_ecc_code.zip是一个压缩包,包含了Java语言实现的椭圆曲线密码算法(Elliptic Curve Cryptography,简称ECC)的相关代码。ECC是一种基于数学难题——椭圆曲线离散对数问题的公钥加密算法,它在安全性相当的情况...

    JAVA_API1.6文档(中文)

    java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 中定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-186 中定义的 DSA(数字签名算法)...

    The Laws of Cryptography wiht Java Code

    《密码学的法则与Java代码》这本书由Neal R. Wagner撰写,涵盖了密码学的基础知识以及与Java编程语言相结合的实例。本书不仅讲解了密码学的基本原则,而且提供了具体的Java代码,让读者可以在实践中学习和掌握密码学...

    java-security-mechanisms-code.rar_java security

    这个压缩包“java-security-mechanisms-code.rar”包含了关于Java安全机制的实例程序,可以帮助我们深入理解Java如何实现其安全特性。 1. **Java安全模型** Java的安全模型基于沙箱模型,它限制了未经许可的代码...

    Java and Android Encrypt Eclipse Project and Source Code

    本文将深入探讨标题"Java和Android Encrypt Eclipse Project and Source Code"所涉及的核心知识点,包括对称加密算法(DES,3DES,AES128和AES256)以及非对称加密算法RSA,并介绍如何在Java和Android平台上实现它们...

    CODE1_rsa_ras_

    实现RSA加解密和签名功能。要求如下:1、安全参数:1024 bits-2048bits 2、有简单的交互界面、或命令行操作 3、语言: Python、 C/C++、Java 4、平台:不限5、加解密可以针对简单的字符文本;签名(验证签名)针对...

    Java Objective C Encrypt/Decrypt Eclipse and XCode Project and Source Code

    本项目提供了在Eclipse(Java)和XCode(Objective-C)环境中进行加密和解密的示例代码,涵盖了DES,3DES,AES128,AES256以及RSA等主流的加密算法。这些算法在信息安全、数据保护以及网络通信中扮演着至关重要的...

Global site tag (gtag.js) - Google Analytics