现在想使用RSA+AES加密技术来进行加密解密求懂的大神来看看~~~~

Inuyashazc 2013-07-26 10:04:00
在网上找到一个范例:
先说下文字描述:
一,A先生成一个对称秘钥,这个秘钥可以是随机生成的,
二,A用B的公钥加密第一步生成的这个对称秘钥
三,A把加密过的对称秘钥发给B
四,A用第一步生成的这个对称秘钥加密实际要发的消息
五,A把用对称秘钥加密的消息发给B
对于B
他先收到A发来的对称秘钥,这个秘钥是用B的公钥加密过的,所以B需要用自己的私钥来解密这个秘钥
然后B又收到A发来的密文,这时候用刚才解密出来的秘钥来解密密文

代码:

public class RSA {

public static final int KEYSIZE = 512;

private KeyPair keyPair;
private Key publicKey;
private Key privateKey;

/**
* 生成秘钥对
* @return
* @throws NoSuchAlgorithmException
*/
public KeyPair generateKeyPair() throws NoSuchAlgorithmException {
KeyPairGenerator pairgen = KeyPairGenerator.getInstance("RSA");
SecureRandom random = new SecureRandom();
pairgen.initialize(RSA.KEYSIZE, random);
this.keyPair = pairgen.generateKeyPair();
return this.keyPair;
}

/**
* 加密秘钥
* @param key
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
* @throws IllegalBlockSizeException
*/
public byte[] wrapKey(Key key) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.WRAP_MODE, this.privateKey);
byte[] wrappedKey = cipher.wrap(key);
return wrappedKey;
}

/**
* 解密秘钥
* @param wrapedKeyBytes
* @return
* @throws NoSuchAlgorithmException
* @throws NoSuchPaddingException
* @throws InvalidKeyException
*/
public Key unwrapKey(byte[] wrapedKeyBytes) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException {
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.UNWRAP_MODE, this.publicKey);
Key key = cipher.unwrap(wrapedKeyBytes, "AES", Cipher.SECRET_KEY);
return key;
}

public Key getPublicKey() {
return publicKey;
}

public void setPublicKey(Key publicKey) {
this.publicKey = publicKey;
}

public Key getPrivateKey() {
return privateKey;
}

public void setPrivateKey(Key privateKey) {
this.privateKey = privateKey;
}

}


我想先问下这里面有用到RES吗?(新人不太懂求解~)然后我有点看不太懂。
我看他的步骤是:先生成秘钥对。那我main应该先调用的就是generateKeyPair方法。
求解释我到底该如调用方法呢~~我想最后需要用一个秘钥方式来解密~~现在等先感谢各位了~
...全文
442 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
niukoume 2013-07-26
  • 打赏
  • 举报
回复
引用 4 楼 zhce001 的回复:
[quote=引用 3 楼 niukoume 的回复:] 先生成一对密钥对(DES),然后用密钥对数据进行加密,RSA的公钥对密钥对加密,传递的数据以及用公钥加密过的密钥。数据接收方用RSA私钥对密钥进行解密,然后用密钥对数据解密。
秘钥对怎么对数据进行加密呢?[/quote]给你个连接 你看看http://www.cnblogs.com/thefeelingofsimple/archive/2012/11/29/2794724.html 我用是IOS ,网上一大堆
Inuyashazc 2013-07-26
  • 打赏
  • 举报
回复
引用 3 楼 niukoume 的回复:
先生成一对密钥对(DES),然后用密钥对数据进行加密,RSA的公钥对密钥对加密,传递的数据以及用公钥加密过的密钥。数据接收方用RSA私钥对密钥进行解密,然后用密钥对数据解密。
秘钥对怎么对数据进行加密呢?
niukoume 2013-07-26
  • 打赏
  • 举报
回复
先生成一对密钥对(DES),然后用密钥对数据进行加密,RSA的公钥对密钥对加密,传递的数据以及用公钥加密过的密钥。数据接收方用RSA私钥对密钥进行解密,然后用密钥对数据解密。
小丑哥_V5 2013-07-26
  • 打赏
  • 举报
回复
Inuyashazc 2013-07-26
  • 打赏
  • 举报
回复
大家各位大神在哪~~~~
大家使用openssl的目的无非就是这三个方面了,1、密码学计算,什么RSA加密解密RSA签名,AES,DES啥啥啥的, 2、生成证书,在写这个源码之前,不仅仅是 易语言 届,包括绝大多数需要自签名证书的,都是调用openssl的命令行,全局操作,要调用API动态申请证书,签署证书的,源码在百度上基本找不到,要翻出去找谷歌,所以我认为至少在易语言范围内,此源码属于首发 3、SSL通讯,这类源码在论坛上不少了,2010年之前东灿大神就发过,他的源码也是我开始学习openssl第一部教程,不过可惜的是论坛上几乎所有openssl通讯源码都或多或少有点问题,基本上没法用于生产环境,所以这次改写了一下,也是翻了不少资料 本套源码特点: 1、几乎是一网打尽所有需要试用openssl的场合,个人认为很有收藏价值,以后基本不需要再去找跟openssl有关的东西了 2、本源码是面向生产环境的,几乎每个子程序,每种应用都考虑到了效率和稳定性,以及内存泄露等诸多问题,拿去之后基本上不需要再修改什么了,要做什么项目直接拿来用就是了 3、着重谈一下SSL通讯,其实在半年前已经重写好了,并且投入了生产环境,目前我3个HTTPS服务器都是用的这套源码,创新之处在于, ? ?? ? A:结合cdecl 壳,让openssl可以调用易语言子程序,进行上锁解锁操作,没有锁的openssl是根本无法象的,加锁以后,多线程随便跑 ? ?? ? B:SSL_accept 和 SSL_connect 的异步调用,这个东西研究的人很少,网上的源码基本都是同步调用,同步调用的弊端是一旦连接丢失了,就会一直卡在那,而异步调用不会存在这个问题 ? ?? ? C:完整的证书验证机制,回调验证,可做双向验证通讯 4、关于证书操作部分,随着计算机计算能力的发展,以及苹果宣布逐渐淘汰不是用https的应用程序,安全证书的需猛增,去颁发机构买一个证书固然省事,但是随便一个证书都是几千块钱一年,并且还不能向下签发给用户,目前像阿里,TX那样的大牛也都开始在用自签名证书,然后向他们的用户发放个人证书,这是一个趋势,作为易语言编程者来说,给自己的用户的软件签发一个个人证书,倒也是一个不错的防破J防抓包方法,目前市面上基本上所有的抓包软件都是只能抓单向验证的HTTP明文,如果你在软件里强行验证服务器证书,并且服务器强行验证客户证书,那抓包软件再牛也没辙,破J起来难度就更大了,本源码证书操作都是用API操作,支持多线程,可以做简易的证书签发服务器 5、密码学计算部分相比我以前发的那个源码新增了一些东西,修改了一些不合理的机制,使用起来更舒服了,具体可以自己看源码

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧