- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
实现加密算法RSA。具体来说:
我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "gmp.h"
#define BASE 256
#ifndef MAXLEN
#define MAXLEN 256
#endif
void str_int(mpz_t r, char *str);
void int_str(char *str, mpz_t org_str_int);
void eukleidhs(mpz_t a,mpz_t b,mpz_t xx,mpz_t yy);
gmp_randstate_t stat;
int main()
{
gmp_randstate_t rand_state;
gmp_randinit_default(rand_state);
long sd = 0;
mpz_t p, q, p1, q1, n, message_int, a, b, temp_p, temp_q, p_1, q_1, f, e, gcd, d, c, m, A, B, C, D, i, ed, ed_m, fl1, fl2, d1, d2;
mpz_t seed;
gmp_randinit(stat, GMP_RAND_ALG_LC, 120);
mpz_init(p);
mpz_init(q);
mpz_init(p1);
mpz_init(q1);
mpz_init(n);
mpz_init(p_1);
mpz_init(q_1);
mpz_init(f);
mpz_init(e);
mpz_init(fl1);
mpz_init(fl2);
mpz_init(d1);
mpz_init(d2);
mpz_init(gcd);
mpz_init(d);
mpz_init(c);
mpz_init(A);
mpz_init(m);
mpz_init(B);
mpz_init(C);
mpz_init(D);
mpz_init(i);
mpz_init(ed);
mpz_init(ed_m);
mpz_init(message_int);
mpz_init(seed);
unsigned char message[MAXLEN], out_message[MAXLEN];
mpz_init(a);
mpz_init(b);
mpz_init(temp_p);
mpz_init(temp_q);
/* (create p 512 BITS)*/
srand( (unsigned) getpid());
sd=rand();
mpz_set_ui(seed, sd);
gmp_randseed(stat, seed);
srand( (unsigned) getpid());
mpz_set_ui(seed, sd);
mpz_urandomb(p1, stat, 512);
/* (create q 512 BITS*/
srand( (unsigned) getpid());
sd=rand();
mpz_set_ui(seed, sd);
gmp_randseed(stat, seed);
srand( (unsigned) getpid());
mpz_set_ui(seed, sd);
mpz_urandomb(q1, stat, 512);
int primetest;
primetest = mpz_probab_prime_p(p1, 5);
if (primetest != 0)
{
mpz_set(p, p1);
printf("p= "); mpz_out_str(stdout, 10, p);
printf("\n");
printf("\n");
}
else
{
mpz_nextprime(p, p1);
printf("p= "); mpz_out_str(stdout, 10, p);
printf("\n");
printf("\n");
}
primetest = mpz_probab_prime_p(q1, 5);
if (primetest != 0)
{
mpz_set(q, q1);
printf("q= "); mpz_out_str(stdout, 10, q);
printf("\n");
printf("\n");
}
else
{
mpz_nextprime(q, p);
printf("q= "); mpz_out_str(stdout, 10, q);
printf("\n");
printf("\n");
}
/*( n, p-1, q-1, f)*/
mpz_mul(n, p, q);
printf("n= "); mpz_out_str(stdout, 10, n); // n=p*q
printf("\n");
printf("\n");
mpz_sub_ui(p_1, p, 1);
printf("p-1= "); mpz_out_str(stdout, 10, p_1); // p-1
printf("\n");
printf("\n");
mpz_sub_ui(q_1, q, 1);
printf("q-1= "); mpz_out_str(stdout, 10, q_1); // q-1
printf("\n");
printf("\n");
mpz_mul(f, p_1, q_1);
printf("f= "); mpz_out_str(stdout, 10, f); //f=(p-1)*(q-1)
printf("\n");
printf("\n");
/*( 1<e<f)*/
sequence1:
mpz_urandomb(e, stat, 512);
if ((mpz_cmp_si(e,1)) && (mpz_cmp (e,f)))
{
mpz_gcd(gcd, e, f);
if (mpz_cmp_si(gcd,1))
{
printf("To e einai:\n");
printf("e= ");
mpz_out_str(stdout, 10, e);
printf("\n");
printf("\n");
}
else
{
goto sequence1;
}
}
else
{
goto sequence1;
}
/*( d WSTE 1<d<f and e*d= 1 mod f)*/
mpz_invert(d, e, f);
printf("To d einai:\n");
printf("d= ");
mpz_out_str(stdout, 10, d);
printf("\n");
printf("\n");
/*keys)*/
printf("The public key is :\n");
printf("(n,e)= ");
printf(" (");
mpz_out_str(stdout, 10, n);
printf(" , ");
mpz_out_str(stdout, 10, e);
printf(") ");
printf("\n");
printf("\n");
printf("The private key is:\n");
printf("d= ");
mpz_out_str(stdout, 10, d);
printf("\n");
printf("\n");
printf("GRAPSE TO MYNHMA SOU(Mexri %d xarakthres) !!!! :", MAXLEN);
fgets(message, MAXLEN - 1, stdin);
str_int(m, message);
#ifdef HEX
gmp_printf("TO MHNYMA(%d) -> %Zx\n\n", strlen(message), m); // EKTTYPWSH MYNHMATOS SE ARITHMO
#else
gmp_printf("TO MHNYMA(%d) -> %Zd\n\n", strlen(message), m);
#endif
/*( c = m^e mod n)*/
mpz_powm(c, m, e, n);
exit1:
printf("TO KRYPTOGRAFHMENO KEIMENO EINAI:\n");
printf("c= ");
mpz_out_str(stdout, 10, c);
printf("\n");
printf("\n");
mpz_set_ui(m,0);
/*( m = c^d mod n)*/
mpz_powm(m, c, d, n);
exit2:
printf("TO APOKRYPTOGRAFHMENO KEIMENO EINAI:\n");
printf("m= ");
mpz_out_str(stdout, 10, m);
printf("\n");
printf("\n");
int_str(out_message, m);
#ifdef HEX
gmp_printf("TO APOKRYPTOGRAFHMENO KEIMENO EINAI: %Zd\n -> %s(%d)\n", m, out_message, strlen(out_message));
#else
gmp_printf("TO APOKRYPTOGRAFHMENO KEIMENO EINAI: %Zd\n -> %s(%d)\n", m, out_message, strlen(out_message));
#endif
return 0;
}
/* SYNARTHSH METATROPHS STRING SE AKERAIO*/
void str_int(mpz_t r, char *str)
{
long int str_len, j;
unsigned char C;
str_len = strlen(str);
if(str[str_len - 1] == '\n')
str[str_len - 1] = '\0';
str_len = strlen(str);
mpz_set_ui(r, 0UL);
for(j = str_len - 1; j >= 0; j--) // r = str[str_len - 1] * BASE^(str_len - 1) + ... + str[1] * BASE + str[0]
{
C = str[j];
mpz_mul_ui(r, r, (unsigned long)BASE);
mpz_add_ui(r, r, (unsigned long)C);
}
}
void int_str(char *str, mpz_t org_str_int)
{
long int str_len, i;
mpz_t max_int, c_int, str_int;
mpz_init(max_int); //ARXIKOPOIHSH
mpz_init(c_int);
mpz_init(str_int);
mpz_set(str_int, org_str_int);
mpz_set_ui(max_int, 1UL);
for(i = 0; i < MAXLEN; i++)
{
if(mpz_cmp(str_int, max_int) <= 0)
{
str_len = i;
break;
}
mpz_mul_ui(max_int, max_int, (unsigned long)BASE);
}
for(i = 0; i < str_len; i++) //METATROPH SE GRAMMA
{
mpz_mod_ui(c_int, str_int, (unsigned long)BASE);
mpz_sub(str_int, str_int, c_int);
mpz_tdiv_q_ui(str_int, str_int, (unsigned long)BASE);
str[i] = mpz_get_ui(c_int);
}
str[str_len] = '\0';
mpz_clear(max_int);
mpz_clear(c_int);
mpz_clear(str_int);
}
/*ALGORITHMOS EUKLEIDH*/
void eukleidhs(mpz_t a,mpz_t b,mpz_t xx,mpz_t yy)
{
int flag=0;
mpz_t d,x,y,x1,x2,y1,y2,q,r;
mpz_t qb,a_qb,temp;
mpz_t qx1,x2_x1;
mpz_t qy1,y2_y1;
mpz_init(x);
mpz_init(y);
mpz_init(d);
if(mpz_cmp(b,a)>0) {
flag=1;
mpz_init(temp);
mpz_set(temp,b);
mpz_set(b,a);
mpz_set(a,temp);
mpz_clear(temp);
}
if(mpz_cmp_ui(b,0)==0) {
mpz_set(d,a);
mpz_set_ui(x,1);
mpz_set_ui(y,0);
}
else {
mpz_init(q);
mpz_init(r);
mpz_init(x1);
mpz_init(x2);
mpz_init(y1);
mpz_init(y2);
mpz_init(qb);
mpz_init(a_qb);
mpz_init(qx1);
mpz_init(qy1);
mpz_init(x2_x1);
mpz_init(y2_y1);
mpz_set_ui(x2,1);
mpz_set_ui(x1,0);
mpz_set_ui(y1,1);
mpz_set_ui(y2,0);
while(mpz_cmp_ui(b,0)>0) {
mpz_tdiv_q(q,a,b);
mpz_mul(qb,q,b);
mpz_sub(a_qb,a,qb);
mpz_set(r,a_qb);
mpz_mul(qx1,q,x1);
mpz_sub(x2_x1,x2,qx1);
mpz_set(x,x2_x1);
mpz_mul(qy1,q,y1);
mpz_sub(y2_y1,y2,qy1);
mpz_set(y,y2_y1);
mpz_set(a,b);
mpz_set(b,r);
mpz_set(x2,x1);
mpz_set(x1,x);
mpz_set(y2,y1);
mpz_set(y1,y);
}
}
mpz_set(d,a);
mpz_set(x,x2);
mpz_set(y,y2);
if(flag==1){
mpz_set(yy,x);
mpz_set(xx,y);
}
else {
mpz_set(yy,y);
mpz_set(xx,x);
}
mpz_clear(d);
mpz_clear(x);
mpz_clear(y);
mpz_clear(x1);
mpz_clear(x2);
mpz_clear(y1);
mpz_clear(y2);
mpz_clear(q);
mpz_clear(r);
mpz_clear(qb);
mpz_clear(a_qb);
mpz_clear(qx1);
mpz_clear(x2_x1);
mpz_clear(qy1);
mpz_clear(y2_y1);
}
我运行程序,但私钥显示为 0,我找不到错误!
最佳答案
最明显的问题是您重复使用相同的值重新播种系统随机数生成器,例如
srand( (unsigned) getpid());
sd=rand();
mpz_set_ui(seed, sd);
gmp_randseed(stat, seed);
不要这样做。您最终每次都会得到相同的随机数,并且将相同的数字重复用于多种目的可能会产生不好的结果。
关于linux - C 私钥中的 RSA 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27786625/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!