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加密解密功能的基础组件,对于理解RSA算法以及在Java项目中安全地使用非对称加密非常有帮助。开发者可以将这些类集成到他们的系统中,以确保数据在传输或存储时的...
在"RSA非对称加密帮助类"中,我们可以预见到一个编程类库,它提供了用于执行RSA加密和解密操作的函数和方法。这个帮助类可能包括以下功能: 1. **密钥生成**:RSA算法需要一对匹配的公钥和私钥。帮助类可能会包含...
本资料包是集合了百度上的多种RSA实践案例,旨在帮助开发者更好地理解和运用RSA技术。 一、RSA原理 RSA算法基于数论中的大数因子分解难题,其核心是两个大素数p和q的乘积n=p*q,以及欧拉函数φ(n)=(p-1)*(q-1)。...
总的来说,C# RSA加密解密工具是一个实用的开发辅助工具,帮助开发者在C#环境中方便地实现RSA加密和解密操作,同时考虑到了与其他语言(如JavaScript和Java)的兼容性,提高了数据安全传输的灵活性和便利性。
总的来说,这个“RSA+AES加密工具类 Java”为开发者提供了一个便利的工具,帮助他们在Java项目中集成高级的加密功能,确保数据的安全传输和存储。通过合理地使用RSA和AES,可以在不牺牲效率的前提下提高应用的安全性...
在IT行业中,安全是至关重要的一个领域,尤其是在网络通信和数据传输中。C#作为.NET框架的主要编程语言,提供了丰富的库...在实际开发中,`CertificateRSAHelper`这样的辅助类可以帮助封装这些操作,使代码更简洁易用。
在PHP中实现RSA加密,可以帮助开发者增强应用的安全性。本文将详细介绍如何在PHP环境中运用RSA算法。 首先,了解RSA的基本原理。RSA算法基于大数因子分解的困难性,通过一对公钥和私钥进行加解密。公钥可以公开,...
在VB(Visual Basic)环境中实现RSA加密算法,可以帮助开发者更好地理解加密过程,并在实际项目中应用。 首先,我们需要了解RSA算法的基本原理。RSA的核心是两个大素数p和q的乘积N=p*q,以及欧拉函数φ(N)=(p-1)*(q...
RSA算法是一种非对称...总结来说,这个"RSA-java.rar"资源提供了一个Java实现RSA加密的实例,可以帮助开发者理解和运用非对称加密技术,增强信息安全能力。通过学习和实践,可以更深入地掌握Java安全编程的相关知识。
1. `clsRsa.asp` - 这是一个VBScript类文件,实现了RSA算法的核心功能。它包含了生成密钥对、加密和解密的方法。在ASP页面中,你可以实例化这个类,然后调用相应的方法来处理数据。 2. `test.htm` - 这可能是一个...
在C语言中实现RSA算法,可以帮助我们理解其工作原理并应用于实际项目。 首先,RSA算法的核心概念包括公钥和私钥。公钥是可以公开的,用于加密数据;私钥是保密的,用于解密数据。任何人都可以用公钥加密信息,但...
Java的`java.security.KeyStore`类可以帮助我们存储和管理这些证书和密钥。 在给定的"demo"文件中,可能包含了一个或多个示例代码,用于演示上述的RSA加签、加密、解密和验签的流程。这些示例代码可以帮助开发者更...
在C#中,我们可以使用`System.Security.Cryptography`命名空间中的`RSACryptoServiceProvider`类来实现RSA加密和解密。首先,我们需要创建一个`RSACryptoServiceProvider`实例,然后生成或加载公钥和私钥对。如果这...
这个压缩包包含了一个RSA类的源代码以及对应的测试程序,这对于理解RSA的工作原理、实现细节以及在实际项目中的应用非常有帮助。 首先,RSA算法的核心思想是基于两个大素数的乘积难以分解的数学难题。它由Ron ...
学习这些源代码可以帮助你深入理解RSA算法的实现细节,并且可以作为编写自己RSA加密解密程序的参考。不过,需要注意的是,实际应用中,如HTTPS、SSH等协议通常使用更高级的加密库,如OpenSSL,这些库已经实现了RSA和...
* RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥解密,公钥加密。 * RSA数字签名-俗称加签验签:私钥加签,公钥验签。 * RSA加密解密:私钥...
这些文档对于理解和实现RSA算法非常有帮助,可以辅助开发者更好地掌握如何在实际项目中应用RSA。 总之,RSA算法的C#和C++实现涉及到大数运算、非对称加密原理以及相关编程语言的API使用。通过学习和实践,开发者...
8. **黑客基地hackbase.htm**:可能是一个关于黑客知识的文档,可能包含了关于密码学和RSA算法的基础介绍,帮助理解RSA在网络安全中的应用。 9. **RSAUpper**:这个文件名可能是某种RSA算法的特定实现或示例,可能...
在本场景中,"签名RSA验签工具"是指一个用于进行RSA签名和验证的软件工具,它可以帮助用户生成私钥和公钥,并且执行签名和验证过程。 私钥是RSA算法中的一个重要组成部分,它由用户保密,用于对数据进行解密或生成...
总结来说,这个压缩包文件包含了一套完整的RSA加密解密资源,涵盖了理论解释、实践工具以及不同平台的代码示例,可以帮助开发者理解和应用RSA算法。无论是在桌面应用、移动设备还是服务器环境中,了解和掌握RSA都是...