1 Star 0 Fork 0

Juwan/CryptFunction

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
Rsa.c 1.63 KB
一键复制 编辑 原始数据 按行查看 历史
junhuanchen 提交于 2017-10-29 08:30 . Create Rsa.c
#include "Rsa.h"
RsaVar RsaCrypt(RsaVar Data, RsaVar Crypt, RsaVar Max)
{
return CryptFastPowMod(Data, Crypt, Max);
}
#ifdef UNIT_TEST
#include "stdio.h"
// 初始化RsaVar模块,生成对称密钥,密钥变量须外部提供。
static void RsaCryptInit(RsaVar Max, RsaVar * Encrypt, RsaVar * Decrypt)
{
// N 数据规模, En = φ(N)(欧拉函数结果), Encrypt 与 Decrypt 分别为两把密钥
RsaVar N = Max, En = CryptEular(N);
if (*Encrypt < 2) *Encrypt = 2;
// 生成__RSA_H__参数
do
{
// 选取 Encrypt 与 En 互质的数
while (1 != CryptGcd(En, *Encrypt))
*Encrypt += 1;
// 求解其乘法逆元,若 Decrypt == -1 则表示 En 与 Encrypt 不互质
*Decrypt = CryptEgcdInverse(*Encrypt, En);
} while (-1 == *Decrypt);
// 打印密钥参数
printf("En:%llu\n", En);
printf("Encrypt:%llu\n", *Encrypt);
printf("Decrypt:%llu\n", *Decrypt);
}
#include <stdlib.h>
#include <assert.h>
int main()
{
// N 数据规模, En = φ(N)(欧拉函数结果),Encrypt 与 Decrypt 分别为两把密钥
RsaVar N = UINT64_MAX, Encrypt = 2, Decrypt;
RsaCryptInit(N, &Encrypt, &Decrypt);
// 若陷入死循环必然是因为没能还原回原数据导致无法进入下一索引(++),可自行测试大于N的数据规模
// Test Encrypt Key
RsaVar src, tmp;
for (src = 0; src != N; src++)
{
tmp = RsaCrypt(src, Encrypt, N);
tmp = RsaCrypt(tmp, Decrypt, N);
assert(src == tmp);
printf("%016llX\n", src);
}
// Test Decrypt Key
for (src = 0; src != N; src++)
{
tmp = RsaCrypt(src, Decrypt, N);
tmp = RsaCrypt(tmp, Encrypt, N);
assert(src == tmp);
printf("%016llX\n", src);
}
return 0;
}
#endif
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/junhuanchen/CryptFunction.git
git@gitee.com:junhuanchen/CryptFunction.git
junhuanchen
CryptFunction
CryptFunction
master

搜索帮助