`

RSA帮助类

 
阅读更多
package com.cmb.fmserver.passport.util;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

@SuppressWarnings("restriction")
public class RSAHelper {
	/**
	 * 得到公钥
	 * @throws IOException 
	 * @throws NoSuchAlgorithmException 
	 * @throws InvalidKeySpecException 
	 */

	public static PublicKey getPublicKey(String key) throws IOException,
			NoSuchAlgorithmException, InvalidKeySpecException {
		byte[] keyBytes;

		keyBytes = (new BASE64Decoder()).decodeBuffer(key);

		X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);

		KeyFactory keyFactory = KeyFactory.getInstance("RSA");

		PublicKey publicKey = keyFactory.generatePublic(keySpec);

		return publicKey;
	}

	public static PrivateKey getPrivateKey(String key) throws IOException,
			NoSuchAlgorithmException, InvalidKeySpecException {
		byte[] keyBytes;
		keyBytes = new BASE64Decoder().decodeBuffer(key);

		PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
		KeyFactory keyFactory = KeyFactory.getInstance("RSA");
		PrivateKey privateKey = keyFactory.generatePrivate(keySpec);
		return privateKey;

	}

	public static String getKeyString(Key key) {
		byte[] keyBytes = key.getEncoded();
		String s = new BASE64Encoder().encode(keyBytes);
		return s;
	}

	public static void main(String[] args) throws IOException,
			NoSuchAlgorithmException, InvalidKeySpecException,
			NoSuchPaddingException, InvalidKeyException,
			IllegalBlockSizeException, BadPaddingException {
		//	System.out.println(RSAHelper.getPublicKey("hello"));

		KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");

		keyPairGen.initialize(1024);

		KeyPair keyPair = keyPairGen.generateKeyPair();

		//System.out.println(keyPair); //null

		//公钥
		PublicKey publicKey = (RSAPublicKey) keyPair.getPublic();

		System.out.println("publicKey:"+publicKey);

		//秘钥
		PrivateKey privateKey = keyPair.getPrivate();

		byte[] publicKeyBytes = publicKey.getEncoded();
		String publicKeyString = (new BASE64Encoder()).encode(publicKeyBytes);
		System.out.println("公钥串:"+publicKeyString);
		byte[] privateKeyBytes = privateKey.getEncoded();
		String privateKeyString = (new BASE64Encoder()).encode(privateKeyBytes);
		System.out.println("私钥串:"+privateKeyString);
		//加解密类
		Cipher cipher = Cipher.getInstance("RSA");
		String text = "你好世界方 啊方是sd";
		System.out.println("加密前:"+text);
		//明文
		byte[] plainText = text.getBytes();

		//加密
		cipher.init(Cipher.ENCRYPT_MODE, publicKey);
		byte[] enBytes = cipher.doFinal(plainText);

		//通过秘钥字符串得到秘钥
		publicKey = getPublicKey(publicKeyString);
		privateKey = getPrivateKey(privateKeyString);

		String encodedStr = new String(enBytes, "UTF-8");
		System.out.println("加密密文为:\n" + encodedStr);

		//解密
		cipher.init(Cipher.DECRYPT_MODE, privateKey);

		byte[] deBytes = cipher.doFinal(enBytes);

		//publicKeyString = getKeyString(publicKey);

		//	System.out.println("publicKeyString=\n"+publicKeyString);

		//privateKeyString = getKeyString(privateKey);
		//	System.out.println("privateKeyString=\n"+privateKeyString);

		String s = new String(deBytes);
		System.out.println("解密后:"+s);

	}

}

 

 

分享到:
评论

相关推荐

    RSA公共类.zip

    总的来说,这个"RSA公共类.zip"提供的类库是实现RSA加密解密功能的基础组件,对于理解RSA算法以及在Java项目中安全地使用非对称加密非常有帮助。开发者可以将这些类集成到他们的系统中,以确保数据在传输或存储时的...

    RSA非对称加密帮助类

    在"RSA非对称加密帮助类"中,我们可以预见到一个编程类库,它提供了用于执行RSA加密和解密操作的函数和方法。这个帮助类可能包括以下功能: 1. **密钥生成**:RSA算法需要一对匹配的公钥和私钥。帮助类可能会包含...

    javarsa工具类

    本资料包是集合了百度上的多种RSA实践案例,旨在帮助开发者更好地理解和运用RSA技术。 一、RSA原理 RSA算法基于数论中的大数因子分解难题,其核心是两个大素数p和q的乘积n=p*q,以及欧拉函数φ(n)=(p-1)*(q-1)。...

    C#RSA加密解密工具

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

    RSA+AES 加密工具类 Java

    总的来说,这个“RSA+AES加密工具类 Java”为开发者提供了一个便利的工具,帮助他们在Java项目中集成高级的加密功能,确保数据的安全传输和存储。通过合理地使用RSA和AES,可以在不牺牲效率的前提下提高应用的安全性...

    C# RSA读取密钥文件pfx cer 签名验签加密解密帮助类

    在IT行业中,安全是至关重要的一个领域,尤其是在网络通信和数据传输中。C#作为.NET框架的主要编程语言,提供了丰富的库...在实际开发中,`CertificateRSAHelper`这样的辅助类可以帮助封装这些操作,使代码更简洁易用。

    PHP版RSA加密算法

    在PHP中实现RSA加密,可以帮助开发者增强应用的安全性。本文将详细介绍如何在PHP环境中运用RSA算法。 首先,了解RSA的基本原理。RSA算法基于大数因子分解的困难性,通过一对公钥和私钥进行加解密。公钥可以公开,...

    RSA-java.rar_RSA 类 java_rsa

    RSA算法是一种非对称...总结来说,这个"RSA-java.rar"资源提供了一个Java实现RSA加密的实例,可以帮助开发者理解和运用非对称加密技术,增强信息安全能力。通过学习和实践,可以更深入地掌握Java安全编程的相关知识。

    RSA2--》加签+加密+解密+验签

    Java的`java.security.KeyStore`类可以帮助我们存储和管理这些证书和密钥。 在给定的"demo"文件中,可能包含了一个或多个示例代码,用于演示上述的RSA加签、加密、解密和验签的流程。这些示例代码可以帮助开发者更...

    rsa.rar_asp rsa_asp 加密_rsa_test.asp_vbs解密

    1. `clsRsa.asp` - 这是一个VBScript类文件,实现了RSA算法的核心功能。它包含了生成密钥对、加密和解密的方法。在ASP页面中,你可以实例化这个类,然后调用相应的方法来处理数据。 2. `test.htm` - 这可能是一个...

    rsa.rar_RSA  C语言_RSA算法C++_RSA解密 C语言_rsa

    在C语言中实现RSA算法,可以帮助我们理解其工作原理并应用于实际项目。 首先,RSA算法的核心概念包括公钥和私钥。公钥是可以公开的,用于加密数据;私钥是保密的,用于解密数据。任何人都可以用公钥加密信息,但...

    C#RSA加密DEMO

    在C#中,我们可以使用`System.Security.Cryptography`命名空间中的`RSACryptoServiceProvider`类来实现RSA加密和解密。首先,我们需要创建一个`RSACryptoServiceProvider`实例,然后生成或加载公钥和私钥对。如果这...

    一个RSA的类的源代码,并有我写的测试程序,非常好用

    这个压缩包包含了一个RSA类的源代码以及对应的测试程序,这对于理解RSA的工作原理、实现细节以及在实际项目中的应用非常有帮助。 首先,RSA算法的核心思想是基于两个大素数的乘积难以分解的数学难题。它由Ron ...

    rsa.zip_rsa_rsa加密解密

    学习这些源代码可以帮助你深入理解RSA算法的实现细节,并且可以作为编写自己RSA加密解密程序的参考。不过,需要注意的是,实际应用中,如HTTPS、SSH等协议通常使用更高级的加密库,如OpenSSL,这些库已经实现了RSA和...

    C# 实现与JAVA互通 加签/验签,RSA加密/解密

    * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。  * RSA加密解密:私钥...

    RSA算法的C#和C++实现

    这些文档对于理解和实现RSA算法非常有帮助,可以辅助开发者更好地掌握如何在实际项目中应用RSA。 总之,RSA算法的C#和C++实现涉及到大数运算、非对称加密原理以及相关编程语言的API使用。通过学习和实践,开发者...

    VC++实现RSA算法

    8. **黑客基地hackbase.htm**:可能是一个关于黑客知识的文档,可能包含了关于密码学和RSA算法的基础介绍,帮助理解RSA在网络安全中的应用。 9. **RSAUpper**:这个文件名可能是某种RSA算法的特定实现或示例,可能...

    签名RSA验签工具

    在本场景中,"签名RSA验签工具"是指一个用于进行RSA签名和验证的软件工具,它可以帮助用户生成私钥和公钥,并且执行签名和验证过程。 私钥是RSA算法中的一个重要组成部分,它由用户保密,用于对数据进行解密或生成...

    RSA密钥加密解密

    总结来说,这个压缩包文件包含了一套完整的RSA加密解密资源,涵盖了理论解释、实践工具以及不同平台的代码示例,可以帮助开发者理解和应用RSA算法。无论是在桌面应用、移动设备还是服务器环境中,了解和掌握RSA都是...

    MD5 RSA 加密方式工具类

    MD5和RSA是两种在计算机安全领域广泛应用的加密算法,主要用在数据的完整性校验和保密通信上。本文将详细介绍这两种加密方式...这些工具类可以帮助开发者在项目中便捷地集成这两种加密方法,确保数据的安全传输和存储。

Global site tag (gtag.js) - Google Analytics