`

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非对称加密帮助类

    RSA非对称加密帮助类及说明文档

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

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

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

    C# RSA读取密钥文件pfx cer 签名验签加密解密帮助类以及RSA公钥私钥与java互转

    Java实现RSA加解密工具类Demo

    这个RSA加解密的Demo是我从别的地方花了好多金币下载的,希望对大家有帮助,资源共享嘛。

    RSA-csharp:c#.NET FrameworkCore下的RSA操作类,支持XML,PEM(PKCS#1,PKCS#8)格式密钥对导入,导出,纯字节码解析0依赖

    :open_book: RSA-csharp的帮助文档本项目.NET Core功能:支持.NET Core , .NET Framework环境下PEM ( PKCS#1 , PKCS#8 )格式RSA密钥对导入,导出。彻底实现采用PEM文件二进制规模上进行字节码解析,简单轻巧0...

    Helper Master

    Public class BarCodeHelper 条形码帮助类 Public class Base64DEncrypt Base64加解密帮助类 Public class BindDataControl 数据展示控件 绑定数据类 Public class CacheHelper 缓存帮助类 Public class ...

    .net与Java互通的RSA公钥加密公钥解密(X509格式证书),支持分段加密

    有朋友叫帮忙做有一个RSA加解密的帮助类,后面发现是与JAVA做交互,对方提供了公钥cer文件。由于C#RSA只支持公钥加密,私钥解密。而现在只能使用公钥加密,公钥解密,而且C#与Java并不互通,所以采用第三方类库 ...

    《RSA实现中弱密钥漏洞分析》本科毕业论文一万字.doc

    目录如下,希望对你有所帮助: 第一章 引言 1.1 研究背景 1.2 研究目的 1.3 研究意义 第二章 RSA算法基础 2.1 RSA算法原理 2.2 RSA密钥生成 2.3 RSA加密解密过程 第三章 弱密钥漏洞概述 3.1 弱密钥定义 3.2 弱密钥...

    RSA加解密在Delphi代码中的实现Demo

    本例直接利用Indy的封装类及OpenSSL的DLL,并用Delphi来实现RAS的密钥对生成、加解密等过程,最大程度地简化了这个复杂的过程,让程序员能够把精力放在业务问题的解决上,减少在这方面探索时所耗费的精力和时间。...

    rsamatlab代码-RSA-OAEP-matlab:使用Matlap进行RSA-OAEP加密-解密

    uint8表示形式转换为使用SHA-256之类的随机Oracle哈希函数的随机编码之后,使用随机的n位素数来使rsa加密消息。 RSA然后使用两个随机素数生成公钥和私钥,使用公钥加密消息,将其保存在文件中,然后使用私钥将其解密...

    基于JAVA的RSA文件加密软件的设计与实现(源代码+论文).rar

    它主要实现了使用Java语言开发的RSA算法进行文件加密的功能,旨在帮助学生深入理解公钥加密技术,并提升编程实践能力。该项目包含两个主要部分:完整的源代码和一个详细的论文文档。源代码部分提供了一套清晰的Java...

    RSA加解密在Delphi代码中的实现Demo-Delphi代码类资源

    本例直接利用Indy的封装类及OpenSSL的DLL,并用Delphi来实现RAS的密钥对生成、加解密等过程,最大程度地简化了这个复杂的过程,让程序员能够把精力放在业务问题的解决上,减少在这方面探索时所耗费的精力和时间。...

    C#基类库大全下载--苏飞版

    PDFOperation--C#PDF文件操作帮助类 类主要功能有1.构造函数2.私有字段3.设置字体4.设置页面大小 5.实例化文档6.打开文档对象7.关闭打开的文档8.添加段落9.添加图片10.添加链接、点 等功能 10.ResourceManager 操作...

    ASP基于RSA的数字签名的设计与实现(源代码+论文)_new.rar

    一类资源描述:Java ASP系统毕业设计资源 1. 概述:该资源集中于Java与ASP结合的Web系统毕业设计。对于学生而言,它提供了从初步的构想到实际开发所需的全方位辅助材料,包括论文、设计文档和源代码等。 2. 包含内容...

    C#基础类库

    C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以实现 CookieHelper C#操作Cookie的帮助类,添加Cookie,删除Cookie,修改Cookie,清理Cookie SessionHelper C#...

    加密帮助类

    支持MD5,RSA加密,RSA加密可以提供pem格式与xml格式转化,主要用于与Java项目对接,本产品用于C#开发,后面会开博文讲解产品使用及原理

    C#基类库(苏飞版)

    PDFOperation--C#PDF文件操作帮助类 类主要功能有1.构造函数2.私有字段3.设置字体4.设置页面大小 5.实例化文档6.打开文档对象7.关闭打开的文档8.添加段落9.添加图片10.添加链接、点 等功能 10.ResourceManager 操作...

    RSAForJava.cs

    Portable.BouncyCastle 支持的 java .netcore RSA公私秘钥帮助类

    JAVA_API1.6文档(中文)

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

    各种方法加密解密类.zip

    压缩包内包含加密解密帮助类,包含功能:MD5 加密,加盐MD5加密,SHA 加密,SHA256 加密,SHA512 加密,HmacSha1 加密,HmacSha256 加密,HmacSha512 加密,HmacSha384 加密,HmacMd5 加密,HmacRipeMd160 加密,AES...

Global site tag (gtag.js) - Google Analytics