c语言字符串非对称加密,RSA算法C语言实现(支持任意位密钥)

本文介绍了如何在C语言中实现RSA非对称加密算法,包括大质数的选取过程,主要依赖于GMP库。文章讨论了JDK中RSA算法的实现细节,如概率质数的判断,并提供了简化版的C语言实现,适用于字符串加解密。
摘要由CSDN通过智能技术生成

之前分享过三种常用MD5、SHA2和AES加密算法(点这里)实现源码,前三者分别属于哈希加密和对称加密,而另一种很常用的非对称加密RSA算法实现这次分享出来。RSA算法的原理和用途大家可以网上自行搜索。虽然其算法原理很简单,但是由于其密钥长度很长(一般至少1024位),所以实际在其相互运算以及大质数查找会牵扯很多算法理论,因此我这里代码实现中数学运算是直接基于GMP(The GNU Multiple Precision Arithmetic Library),我将其linux64位下编译好的动静态库都已上传,如果环境相同可以不用安装直接使用。另外针对RSA算法内的大质数p和q以及公钥e和私钥d等也是有要求的(参考这里),这块我是参考JDK内RSA算法的实现。

下面开始准备工作,首先是大质数的选取,由于大质数判断是相当困难,所以当前对于大质数的选取都是概率选取,先看下JDK内实现(我查看的代码版本是jdk-10.0.1)

BigInteger.java内762-769行,其中SMALL_PRIME_THRESHOLD为常量95 ,DEFAULT_PRIME_CERTAINTY为常量100,rnd入参是一个随机数,所以是按95位为分界对应两个不同方法,我这里只考虑长密钥所以直接看大的

public static BigInteger probablePrime(intbitLength, Random rnd) {if (bitLength < 2)throw new ArithmeticException("bitLength < 2");return (bitLength < SMALL_PRIME_THRESHOLD ?smallPrime(bitLength, DEFAULT_PRIME_CERTAINTY, rnd) :

largePrime(bitLe

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值