- 浏览: 656893 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
HkEndless:
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
Spring CallBack回调机制介绍 -
hanmiao:
写的真乱啊,完全不知所云...
Java如何调用可执行文件和批处理命令 -
junia_1:
junia_1 写道 shock: ...
为什么要使用EJB -
junia_1:
shock:
为什么要使用EJB -
coollifer:
不错
SQL Server数据导入到Oracle中的方法
import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.RSAPublicKeySpec;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.InvalidKeySpecException;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import java.io.*;
import java.math.BigInteger;
/**
* RSA 工具类。提供加密,解密,生成密钥对等方法。
* 需要到http://www.bouncycastle.org下载bcprov-jdk14-123.jar。
*
*/
public
class RSAUtil {
/**
* 生成密钥对
* @return
KeyPair
* @throws EncryptException
*/
public
static
KeyPair generateKeyPair() throws EncryptException {
try
{
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"
,
new
org.bouncycastle.jce.provider.BouncyCastleProvider());
final
int
KEY_SIZE = 1024;//没什么好说的了,这个值关系到块加密的大小,可以更改,但是不要太大,否则效率会低
keyPairGen.initialize(KEY_SIZE, new
SecureRandom());
KeyPair keyPair = keyPairGen.genKeyPair();
return
keyPair;
} catch
(Exception e) {
throw new
EncryptException(e.getMessage());
}
}
/**
* 生成公钥
* @param modulus
* @param publicExponent
* @return
RSAPublicKey
* @throws EncryptException
*/
public
static
RSAPublicKey generateRSAPublicKey(byte[] modulus, byte[] publicExponent) throws EncryptException {
KeyFactory keyFac = null
;
try
{
keyFac = KeyFactory.getInstance("RSA"
, new
org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch
(NoSuchAlgorithmException ex) {
throw new
EncryptException(ex.getMessage());
}
RSAPublicKeySpec pubKeySpec = new
RSAPublicKeySpec(new
BigInteger(modulus), new
BigInteger(publicExponent));
try
{
return
(RSAPublicKey) keyFac.generatePublic(pubKeySpec);
} catch
(InvalidKeySpecException ex) {
throw new
EncryptException(ex.getMessage());
}
}
/**
* 生成私钥
* @param modulus
* @param privateExponent
* @return
RSAPrivateKey
* @throws EncryptException
*/
public
static
RSAPrivateKey generateRSAPrivateKey(byte[] modulus, byte[] privateExponent) throws EncryptException {
KeyFactory keyFac = null
;
try
{
keyFac = KeyFactory.getInstance("RSA"
, new
org.bouncycastle.jce.provider.BouncyCastleProvider());
} catch
(NoSuchAlgorithmException ex) {
throw new
EncryptException(ex.getMessage());
}
RSAPrivateKeySpec priKeySpec = new
RSAPrivateKeySpec(new
BigInteger(modulus), new
BigInteger(privateExponent));
try
{
return
(RSAPrivateKey) keyFac.generatePrivate(priKeySpec);
} catch
(InvalidKeySpecException ex) {
throw new
EncryptException(ex.getMessage());
}
}
/**
* 加密
* @param key 加密的密钥
* @param data 待加密的明文数据
* @return
加密后的数据
* @throws EncryptException
*/
public
static
byte[] encrypt(Key key, byte[] data) throws EncryptException {
try
{
Cipher cipher = Cipher.getInstance("RSA"
, new
org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(Cipher.ENCRYPT_MODE, key);
int
blockSize = cipher.getBlockSize();//获得加密块大小,如:加密前数据为128个byte,而key_size=1024 加密块大小为127 byte,加密后为128个byte;因此共有2个加密块,第一个127 byte第二个为1个byte
int
outputSize = cipher.getOutputSize(data.length);//获得加密块加密后块大小
int
leavedSize = data.length % blockSize;
int
blocksSize = leavedSize != 0 ? data.length / blockSize + 1 : data.length / blockSize;
byte[] raw = new
byte[outputSize * blocksSize];
int
i = 0;
while (data.length - i * blockSize > 0) {
if (data.length - i * blockSize > blockSize)
cipher.doFinal(data, i * blockSize, blockSize, raw, i * outputSize);
else
cipher.doFinal(data, i * blockSize, data.length - i * blockSize, raw, i * outputSize);
//这里面doUpdate方法不可用,查看源代码后发现每次doUpdate后并没有
什么实际动作除了把byte[]放到ByteArrayOutputStream中,而最后doFinal的时候才将所有的byte[]进行加密,可是到
了此时加密块大小很可能已经超出了OutputSize所以只好用dofinal方法。
i++;
}
return
raw;
} catch
(Exception e) {
throw new
EncryptException(e.getMessage());
}
}
/**
* 解密
* @param key 解密的密钥
* @param raw 已经加密的数据
* @return
解密后的明文
* @throws EncryptException
*/
public
static
byte[] decrypt(Key key, byte[] raw) throws EncryptException {
try
{
Cipher cipher = Cipher.getInstance("RSA"
, new
org.bouncycastle.jce.provider.BouncyCastleProvider());
cipher.init(cipher.DECRYPT_MODE, key);
int
blockSize = cipher.getBlockSize();
ByteArrayOutputStream bout = new
ByteArrayOutputStream(64);
int
j = 0;
while (raw.length - j * blockSize > 0) {
bout.write(cipher.doFinal(raw, j * blockSize, blockSize));
j++;
}
return
bout.toByteArray();
} catch
(Exception e) {
throw new
EncryptException(e.getMessage());
}
}
/**
*
* @param args
* @throws Exception
*/
public
static
void main(String[] args) throws Exception {
File file = new
File("test.html"
);
FileInputStream in = new
FileInputStream(file);
ByteArrayOutputStream bout = new
ByteArrayOutputStream();
byte[] tmpbuf = new
byte[1024];
int
count = 0;
while ((count = in.read(tmpbuf)) != -1) {
bout.write(tmpbuf, 0, count);
tmpbuf = new
byte[1024];
}
in.close();
byte[] orgData = bout.toByteArray();
KeyPair keyPair = RSAUtil.generateKeyPair();
RSAPublicKey pubKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey priKey = (RSAPrivateKey) keyPair.getPrivate();
byte[] pubModBytes = pubKey.getModulus().toByteArray();
byte[] pubPubExpBytes = pubKey.getPublicExponent().toByteArray();
byte[] priModBytes = priKey.getModulus().toByteArray();
byte[] priPriExpBytes = priKey.getPrivateExponent().toByteArray();
RSAPublicKey recoveryPubKey = RSAUtil.generateRSAPublicKey(pubModBytes,pubPubExpBytes);
RSAPrivateKey recoveryPriKey = RSAUtil.generateRSAPrivateKey(priModBytes,priPriExpBytes);
byte[] raw = RSAUtil.encrypt(priKey, orgData);
file = new
File("encrypt_result.dat"
);
OutputStream out = new
FileOutputStream(file);
out.write(raw);
out.close();
byte[] data = RSAUtil.decrypt(recoveryPubKey, raw);
file = new
File("decrypt_result.html"
);
out = new
FileOutputStream(file);
out.write(data);
out.flush();
out.close();
}
}
发表评论
-
hibernate Restrictions用法 MatchMode.ANYWHERE
2012-07-14 15:50 3945方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 996This example shows how a serv ... -
MyClassLoader 自定义类加载器
2012-05-27 19:38 1507package demo; import java. ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1116Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1111eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1088import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1291/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 15064.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1251栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1254Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 6181、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 833Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 709import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 895经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2877Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2304C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1800import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1054首先写一个接口: package net.test.dyna ... -
Java如何调用可执行文件和批处理命令
2011-06-07 00:58 2328Java是种跨平台的语言,我们经常碰到需要通过Java调用wi ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1389调用方法 <img src=&quo ...
相关推荐
在Unity中实现RSA加密和解密,我们可以利用C#的System.Security.Cryptography命名空间中的RSACryptoServiceProvider类。下面是一个简单的示例,展示了如何使用这个类: 1. **创建密钥对**: 在Unity中,你可以创建...
设计到的方法如下: DigitalSign init getInstance SignMsgByRelativePath SignMsgByInputStream signMsgByAbsolutePath verifyMsgByInputSteam verifyMsgByAbsolutePath verifyMsgByRelativePath encryptMsg ...
后来又传了个新的,叫做“包括私钥加密的RSA密钥生成和加密解密”基于.net Framework 4编,能够生成公钥私钥,直观看到(e,n)和(d,n),能够进行文本及文件加密解密(相关函数输入输出均为byte[],非常好用),...
这通常涉及使用Java的`KeyPairGenerator`类,设置RSA算法,并通过`generateKeyPair()`方法生成一对密钥。 2. **加密操作**:使用公钥进行加密,此过程是不可逆的。`encrypt()`方法可能接收明文数据和公钥,然后调用...
在本压缩包中,提供了RSA加密解密的工具——PRO_TDES_RSA.exe,这是一个执行程序,能够帮助用户对文件进行加密和解密操作。结合"RSATool工具简易操作指南 .doc",用户可以详细了解如何使用这个工具来保护他们的敏感...
RSA加密解密是一种广泛应用于网络安全领域的非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位科学家在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得只有持有正确密钥的人才能...
RSA算法是一种非对称加密技术,它在信息安全领域扮演着重要的角色。非对称加密与对称加密的主要区别在于,它使用两个不同的密钥:一个...开发者可以通过运行这些示例代码,理解并应用RSA加密解密技术到自己的项目中。
这种算法基于大数因子分解的数学难题,使得在实际应用中,只有拥有正确密钥的人才能解密信息...本压缩包中的"RSA加密类包"可能包含了实现这一过程所需的各种工具和代码示例,便于开发者在项目中集成和使用RSA加密功能。
C# RSA加密解密工具是一种基于公钥/私钥对的加密算法实现,主要用于保障数据的安全传输和存储。RSA(Rivest-Shamir-Adleman)算法是公开密钥加密技术的鼻祖,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出...
以上就是Java中使用RSA加密解密的基本操作,包括生成密钥对、保存和加载密钥文件,以及处理超长字符的分块加密和解密。这些知识点在实际的项目开发中非常实用,特别是涉及到敏感数据传输和存储时。在处理过程中,...
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不...
因此,如果需要加密大量数据,通常会采用一种称为“密钥交换”的方式,先用RSA加密一个对称密钥,然后使用这个对称密钥加密大量数据,这样可以提高效率。 - RSA加密过程是不可逆的,因此在使用前需确认加密和解密的...
C#作为.NET框架下的主要编程语言,提供了丰富的类库支持RSA加密解密操作。本篇文章将深入探讨C#如何实现RSA加密解密,并结合Winform界面进行演示。 **1. RSA算法基础** RSA算法基于数论原理,包括大数因子分解的...
以下是一个简单的RSA加密解密工具类的实现: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.PrivateKey; import java.security.PublicKey; import java....
本文详细介绍了Java实现的RSA加密解密算法,包括密钥对生成、公钥和私钥的使用、加密和解密、密钥文件的生成等知识点。这些知识点对于Java开发者来说非常重要,可以帮助他们更好地理解和实现RSA加密解密算法。
本文将深入探讨RSA加密解密原理、在ARM架构上的实现以及相关程序示例。 首先,RSA的核心原理基于数论中的大数因子分解难题。两个大素数相乘很容易,但将其因子分解却极其困难。RSA算法就是利用这个特性来实现加密和...
C# RSA加密解密工具是一种基于公钥/私钥对的加密算法实现,主要用于保障数据的安全传输和存储。RSA(Rivest-Shamir-Adleman)算法是公开密钥加密技术的鼻祖,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出...
在"RSA加密算法"这个压缩包文件中,可能包含了实现RSA算法的代码示例或工具,用户可以通过这些资源学习如何生成RSA密钥对,以及如何使用这些密钥进行加密和解密操作。通过实践,用户可以更深入地理解RSA的工作原理,...
本资源提供了RSA加密解密的源码,适用于学习和理解RSA算法的工作原理及其实现。 首先,RSA算法的核心原理基于大数的因式分解困难性。它由三位科学家Rivest、Shamir和Adleman于1977年提出,因此得名RSA。该算法包括...
/// RSA加密解密及RSA签名和验证 /// </summary> public class RSACryption { public RSACryption() { } #region RSA 加密解密 #region RSA 的密钥产生 /// /// RSA 的密钥...