- 浏览: 646300 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 3883方法 说明 Res ... -
URLClassLoader
2012-05-27 19:45 968This example shows how a serv ... -
MyClassLoader 自定义类加载器
2012-05-27 19:38 1480package demo; import java. ... -
Deal with big-endian and little-endian order
2011-12-25 19:17 1080Java virtual machine always use ... -
修改eclipse的背景色
2011-11-12 19:23 1089eclipse 操作界面默认颜色为白色。对于我们长期 ... -
多线程管道流输入输出模式
2011-11-07 07:23 1067import java.io.* ; class Send ... -
Java计数单字节双字节字符个数的例子
2011-10-26 14:29 1272/* 计数单双字符的个数并存储在Map对象中 ... -
常用内存数据库3
2011-10-24 00:24 14644.1.2 哪些场合适合使用其他的关系型数据库管 ... -
java字节码规则
2011-09-05 13:56 1226栈和局部变量操作 将常量压入栈的指令 aconst_nul ... -
Tomcat中限制ip访问
2011-08-23 21:40 1230Tomcat中限制ip访问是非常简单的,只需要编辑server ... -
一个Java程序员应该掌握的10项技能
2011-08-22 10:27 5981、语法:必须比较熟 ... -
2011 年 8 月 Java 开发人员新闻快讯
2011-08-18 18:59 805Java SE 7 发布了! 经过世界各地 Ja ... -
BlockingQueue
2011-08-13 09:59 688import java.util.concurrent.Arr ... -
eclipse中java项目转换为web项目
2011-07-27 18:29 877经常在eclipse中导入web项目时,出现转不了项目类型 ... -
Oracle官方Weblogic插件安装
2011-07-20 22:00 2843Installing Oracle Enterprise Pa ... -
Java集合HashSet-ArrayList-HashMap的线程同步控制方法和区别
2011-06-21 17:44 2285C ollections类中提供了多 ... -
关于java的集合类,以及HashMap中Set的用法
2011-06-21 17:35 1767import java.util.*; public c ... -
Java的动态代理实例
2011-06-16 03:44 1033首先写一个接口: package net.test.dyna ... -
Java如何调用可执行文件和批处理命令
2011-06-07 00:58 2284Java是种跨平台的语言,我们经常碰到需要通过Java调用wi ... -
jsp实现图片验证码的方法
2011-06-07 00:57 1367调用方法 <img src=&quo ...
相关推荐
设计到的方法如下: DigitalSign init getInstance SignMsgByRelativePath SignMsgByInputStream signMsgByAbsolutePath verifyMsgByInputSteam verifyMsgByAbsolutePath verifyMsgByRelativePath encryptMsg ...
unity工具类RSA加密和解密
后来又传了个新的,叫做“包括私钥加密的RSA密钥生成和加密解密”基于.net Framework 4编,能够生成公钥私钥,直观看到(e,n)和(d,n),能够进行文本及文件加密解密(相关函数输入输出均为byte[],非常好用),...
Java 生成RSA密钥进行数据加密解密 支持超长字符分区 ,同时支持本地读取生成的密钥文件和远程服务器上存放的秘钥文件
RSA加密算法,能手动生成密钥,进行加密解密
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不...
spring框架中关于RSA sha-256加密解密,加签验签工具类
RSA加密解密工具,用于各类敏感信息文件的加密和解密,压缩包内含操作说明
/// RSA加密解密及RSA签名和验证 /// </summary> public class RSACryption { public RSACryption() { } #region RSA 加密解密 #region RSA 的密钥产生 /// /// RSA 的密钥...
1.stm32上运行64位密钥的rsa算法,包括密钥产生,加密,解密和验证。 2.提供vs的源码工程文件,实现密钥产生验证,及stm32 可执行文件插入密钥 3.说明文档和rsa原理。 4.可以实现stm作为电子狗类似的系统保护器件。
RSA工具类,囊括了 生成密钥对、私钥解密、公钥加密、私钥签名、公钥验证的方法,并且其中有例子,可直接运行。
JAVA中RSA加密解密工具类
rsa加密技术是js前端加密,服务端解密,很适合密文加密传输
能够生成公钥私钥,直观看到(e,n)和(d,n),能够进行文本及文件加密解密(相关函数输入输出均为byte[],非常好用),最大特点是能够使用私钥加密(.net中处于防止不当私钥加密泄露私钥的问题,好像只提供签名,即...
RSA密钥生成工具,自动生成密钥私钥工具,方便使用,一键生成
可以直接运行成功的RSA加密解密示例 JAVA端采用公钥加密,服务端C#采用私钥解密。
rsa对字符加密,解密。程序加密,解密,示例程序,程序不大,适合参考学习
RSA加密解密C#实现调用实例 public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString) { try { byte[] PlainTextBArray; byte[] CypherTextBArray; string Result; System.Security....
RSA解密加密JAVA
经过本人修改,简化并完善了别人的代码,使其更加的容易理解和学习! 此为一个完整的项目,...功能:服务端随机生成密钥,JS用公钥加密,服务端用私钥解密。用到的JS加密文件是从官网下载的最新版,速度快,稳定性好!