RSA算法在C 中的植入
implantation of RSA algorithm in c++
我正在研究一个项目,以实现C 中的RSA算法,我以前不知道C ,但我仍在学习,我在RSA中的问题是如何将字符编码为0-25的数字:一个编码为0,b至1,C至2,。。z至25,
这是我的代码:
/*
* C++ Program to Implement the RSA Algorithm
*/
#include<iostream>
#include<math.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
long int p, q, n, t, flag, e[100], d[100], temp[100], j, m[100], en[100], i;
char msg[100];
int prime(long int);
void ce();
long int cd(long int);
void encrypt();
void decrypt();
int prime(long int pr)
{
int i;
j = sqrt(pr);
for (i = 2; i <= j; i++)
{
if (pr % i == 0)
return 0;
}
return 1;
}
int main()
{
cout << "nENTER FIRST PRIME NUMBERn";
cin >> p;
flag = prime(p);
if (flag == 0)
{
cout << "nWRONG INPUTn";
exit(1);
}
cout << "nENTER ANOTHER PRIME NUMBERn";
cin >> q;
flag = prime(q);
if (flag == 0 || p == q)
{
cout << "nWRONG INPUTn";
exit(1);
}
cout << "nENTER MESSAGEn";
fflush(stdin);
cin >> msg;
for (i = 0; msg[i] != NULL; i++)
m[i] = msg[i];
n = p * q;
t = (p - 1) * (q - 1);
ce();
cout << "nPOSSIBLE VALUES OF e AND d AREn";
for (i = 0; i < j - 1; i++)
cout << e[i] << "t" << d[i] << "n";
encrypt();
decrypt();
return 0;
}
void ce()
{
int k;
k = 0;
for (i = 2; i < t; i++)
{
if (t % i == 0)
continue;
flag = prime(i);
if (flag == 1 && i != p && i != q)
{
e[k] = i;
flag = cd(e[k]);
if (flag > 0)
{
d[k] = flag;
k++;
}
if (k == 99)
break;
}
}
}
long int cd(long int x)
{
long int k = 1;
while (1)
{
k = k + t;
if (k % x == 0)
return (k / x);
}
}
void encrypt()
{
long int pt, ct, key = e[0], k, len;
i = 0;
len = strlen(msg);
while (i != len)
{
pt = m[i];
pt = pt - 96;
k = 1;
for (j = 0; j < key; j++)
{
k = k * pt;
k = k % n;
}
temp[i] = k;
ct = k + 96;
en[i] = ct;
i++;
}
en[i] = -1;
cout << "nTHE ENCRYPTED MESSAGE ISn";
for (i = 0; en[i] != -1; i++)
printf("%c", en[i]);
}
void decrypt()
{
long int pt, ct, key = d[0], k;
i = 0;
while (en[i] != -1)
{
ct = temp[i];
k = 1;
for (j = 0; j < key; j++)
{
k = k * ct;
k = k % n;
}
pt = k + 96;
m[i] = pt;
i++;
}
m[i] = -1;
cout << "nTHE DECRYPTED MESSAGE ISn";
for (i = 0; m[i] != -1; i++)
printf("%c", m[i]);
}
不确定我会得到您的问题,但我的赌注是您在问如何在ASCII和字符的数字表示之间转换。
编码/解码与 RSA 无关。您只需使用动态范围移动。由于字母在 ascii 中的顺序增加,因此唯一剩下的就是将a
或A
取代为零。
对于小写字符到数字转换,请尝试:
char c='m'; // c is you character m for example
int i=c-`a`; // i is output number
如果您同时获得了小写字母和大写字母,则需要将其更改为:
char c='q'; // c is you character q for example
int i; // i is output number
if ((c>='a')&&(c<='z')) i=c-'a';
else i=c-'A';`
其中 c
是您的角色,而i
是输出编号
对于char转换的数字尝试:
c=i+`a`;
或大写:
c=i+`A`;
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- 在Crypto++中使用原始RSA算法加密和解密消息
- RSA算法在C 中的植入
- RSA数字和字符值算法
- RSA算法——无法验证d