请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

时间:2022-07-21 19:43:55
由于最近在做java平台和C平台的交互,需要使用RSA加密交互消息,因为使用的MTK的C开发平台,所以调库有点困难,因为需要实现的功能很简单就是使用java那边给的public key在C这边进行消息加密和解密,所以打算纯手写实现在两个功能,但是网上找了些资料都不是太详细,现在只实现了部分算法,有没有大佬以前写过该部分代码,或者熟悉做过rsa加密,或者在MTK平台做过rsa加密的,希望可以指点小弟一二,谢谢各位了

14 个解决方案

#1


百度搜相关关键字。

#2


百度能找到的都是一些简单的rsa加密实现,秘钥很小,并且没有pkcs填充算法,java那边是用1028生成的秘钥,百度和google我都找了,百度根本没有,Google相关的回复也很少

#4


各位大佬我需要不调用库(OpenSSL),纯C自己实现,谢谢

#5


把OpenSSL中的代码抄出来...  请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

#6


能找到RSA源码吗?如果能找到是不是就可以破译了呢?

#7


引用 6 楼 cfjtaishan 的回复:
能找到RSA源码吗?如果能找到是不是就可以破译了呢?


OpenSSL是用源码,官方的库文件中源码中仍然有封装的接口函数,并且OpenSSL太大,破解起来难度更高

#8


也就写个 大数运算库, 没啥麻烦的, 就是简单写的跑的有点慢, 网上很多的,  随便找一个,  不需要动态内存分配的也很好找,   我写了个跑 secp256k1 还行, 跑 RSA 解密/签名就慢的没边了...
你那CPU是 ARM 的吧, ARM 的移植 gmp 好, 这个跑的快 ...

#9


大数运算开源代码这个世界上目前至少有100个版本,我猜。 请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

#10


引用 9 楼 zhao4zhong1 的回复:
大数运算开源代码这个世界上目前至少有100个版本,我猜。 请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

我猜101种至少~

#11


之前做项目时想自己实现一下RSA加密算法,但是在大数运算上遇到了很多问题,最后还是了解原理之后老老实实用openssl了,自己实现太麻烦了

#12


RSA的实现是最简单的了,不要想着从openssl那里抄,它那个很全面的,导致代码很复杂。

#13


p,q为素数,保密
long KEY1 = pq(公开),KEY1为公钥1
long oula = (p-1) * (q-1) 保密
随机选KEY2,令满足 gcd(KEY2, oula ) = 1,  KEY2为公钥2,  gcd最大公约数,网上有算法

计算KEY3,满足(KEY2*KEY3% oula  == 1), 则KEY3为私钥

加密过程
unsigned char msg;
unsigned char  cipher =  pow(msg, KEY2)% KEY1 ;   pow库函数,是次方

解密
unsigned char msg2 = pow(cipher, KEY3) % KEY1 

#1


百度搜相关关键字。

#2


百度能找到的都是一些简单的rsa加密实现,秘钥很小,并且没有pkcs填充算法,java那边是用1028生成的秘钥,百度和google我都找了,百度根本没有,Google相关的回复也很少

#3


#4


各位大佬我需要不调用库(OpenSSL),纯C自己实现,谢谢

#5


把OpenSSL中的代码抄出来...  请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

#6


能找到RSA源码吗?如果能找到是不是就可以破译了呢?

#7


引用 6 楼 cfjtaishan 的回复:
能找到RSA源码吗?如果能找到是不是就可以破译了呢?


OpenSSL是用源码,官方的库文件中源码中仍然有封装的接口函数,并且OpenSSL太大,破解起来难度更高

#8


也就写个 大数运算库, 没啥麻烦的, 就是简单写的跑的有点慢, 网上很多的,  随便找一个,  不需要动态内存分配的也很好找,   我写了个跑 secp256k1 还行, 跑 RSA 解密/签名就慢的没边了...
你那CPU是 ARM 的吧, ARM 的移植 gmp 好, 这个跑的快 ...

#9


大数运算开源代码这个世界上目前至少有100个版本,我猜。 请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

#10


引用 9 楼 zhao4zhong1 的回复:
大数运算开源代码这个世界上目前至少有100个版本,我猜。 请教各位大佬,如何用C实现RSA公钥加密和解密,不调用库纯实现

我猜101种至少~

#11


之前做项目时想自己实现一下RSA加密算法,但是在大数运算上遇到了很多问题,最后还是了解原理之后老老实实用openssl了,自己实现太麻烦了

#12


RSA的实现是最简单的了,不要想着从openssl那里抄,它那个很全面的,导致代码很复杂。

#13


p,q为素数,保密
long KEY1 = pq(公开),KEY1为公钥1
long oula = (p-1) * (q-1) 保密
随机选KEY2,令满足 gcd(KEY2, oula ) = 1,  KEY2为公钥2,  gcd最大公约数,网上有算法

计算KEY3,满足(KEY2*KEY3% oula  == 1), 则KEY3为私钥

加密过程
unsigned char msg;
unsigned char  cipher =  pow(msg, KEY2)% KEY1 ;   pow库函数,是次方

解密
unsigned char msg2 = pow(cipher, KEY3) % KEY1 

#14