(ECC)RSA和AES混合算法实战(客户端、服务端双向加密)

本文介绍了一种结合RSA和ECC的混合加密方案,适用于客户端和服务端之间的双向加密通信。该方案利用RSA加密AES密钥,再用AES密钥加密实际数据,解决了RSA加密长度限制的问题,同时利用ECC的高效性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RSA和ECC混合算法实战(客户端、服务端双向加密)

注意点(RSA加密数据性能较弱,而且有长度限制,最多不能超过117位数据,超出后则抛出异常)

默认情况下AES加密、ECC加密都是只支持128位加密(16个字符),如有需要,则更改美国对软件出口的控制。

JCE8下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

替换C:\Java\jdk1.8.0_72\jre\lib\security下local_policy.jar、US_export_policy.jar进行替换。
因此我们的总体算法是Rsa加密AesKey,AesKey加密数据

分析操作:

1、服务端创建一对(RSA、ECC)非对称加密公私钥(A-PublicKey、A-PrivateKey)
此时服务器存储私钥,公钥对所有客户端公开,且客户端需要保存公钥
如果返回给客户端数据也需要加密的话,则在客户端也创建一对(RSA、ECC)非对称加密公私钥(B-PublicKey、B-PrivateKey)

(a)、客户端本地创建RSA公私钥B-PublicKey、B-PrivateKey,本地保存私钥,公钥发起请求上传B-PublicKey到服务端,同时客户端需要传输一个UUID来
保存请求,第一次请求是没有用户的,因此此UUID需要保持唯一,若用户更换客户端,则之前的B-PublicKey和UUID已废弃,需重新生成

(b)、服务端接受客户端请求,根据UUID保存用户的B-PublicKey到Redis或MongoDB,便于后续此用户操作直接从后台拿到B-PublicKey

2、客户端发起请求需要用使用AES先加密数据得到AesEncodeData,使用A-PublicKey加密AesKey得到RsaEncodeData其中A-PublicKey是保存在客户端的,不需要传输,最终发起请求的数据为Data=AesEncodeData & Key=RsaEncodeData

3、服务端获取到客户端请求后,先使用私钥A-PrivateKey进行解密,获取到AesKey,再使用AesKey解密获取到用户真实请求的数据

4、服务端业务操作完成之后,使用之前客户端的B-PublicKey加密返回数据,和步骤2操作一致此时需要用使用AES先加密数据得到AesEncodeData,使用B-PublicKey加密AesKey得到RsaEncodeData其中B-PublicKey是保存在客户端的,不需要传输,最终返回的数据为Data=AesEncodeData & Key=RsaEncodeData

 

5、客户端获取到服务端响应数据后,先使用私钥B-PrivateKey进行解密,获取到AesKey,再使用AesKey解密获取到服务端真实响应的数据

总结:服务端和客户端都是用RSA创建公私钥,服务端私钥是一个,各个客户端使用的公钥也是不变的,而客户端创建公私钥是多个,服务端保存每一个客户端的公钥,用于加密数据返回给客户端。RSA公私钥是非对称加密,公私钥需要分开保存,但是由于RSA的特殊性(长度和性能限制),则需要结合AES等对称加密算法一起使用,保证数据安全

 

ECC英文全称"Ellipse Curve Cryptography",椭圆曲线算法

RSA是通过2个较大质数求乘积,从而使得因子分解困难性的加密方法不同,ECC通过椭圆曲线方程式的性质产生密钥

ECC164位的密钥产生的安全级别相当于RSA1024位密钥提供的安全强度,且计算量较小,处理速度更快,存储空间和传输带宽占用较少。目前我国居民二代身份证也正在使用256位的椭圆曲线密码,虚拟货币(比特币)也选择ECC作为加密算法。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值