Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C SHA1消息摘要转换为纯文本_C_Encryption_Sha - Fatal编程技术网

C SHA1消息摘要转换为纯文本

C SHA1消息摘要转换为纯文本,c,encryption,sha,C,Encryption,Sha,如何将邮件摘要转换为纯文本(返回原始邮件)。我使用以下函数计算消息摘要。SHA1代码可以在中找到,我找不到一个函数来为我进行转换。有什么算法可以做到这一点吗 我还试图解密和加密消息,这就是问题的根源 int main() { char qbits[5]; char rbits[5]; char ID[SIZE]; //User ID char message[SIZE]; //User message char shamessage[SIZE]; //The inp

如何将邮件摘要转换为纯文本(返回原始邮件)。我使用以下函数计算消息摘要。SHA1代码可以在中找到,我找不到一个函数来为我进行转换。有什么算法可以做到这一点吗

我还试图解密和加密消息,这就是问题的根源

int main()
{

  char qbits[5];
  char rbits[5];
  char ID[SIZE];   //User ID
  char message[SIZE];   //User message
  char shamessage[SIZE]; //The input message digest(sha1 result)

  char xor_result[SIZE]; //Sender XOR result---V
  char xor_result_receiver[SIZE];  //Receiver XOR result
  memset(xor_result, 0, sizeof(char)*SIZE);
  memset(xor_result_receiver, 0, sizeof(char)*SIZE);


  pairing_t pairing;   //The pair of bilinear map

  element_t P, Ppub, s, U, Qid, Sid;
  mpz_t messagehash;
  mpz_init(messagehash);

  printf("\n############SETUP############\n");
    printf("Please enter rbits:");
  scanf("%[0-9]", rbits);
    getchar();
  printf("\nPlease enter qbits:");
  scanf("%[0-9]", qbits);
    getchar();

  setup_sys(atoi(rbits), atoi(qbits), P, Ppub, pairing, s);
  printf("System parameters have been set!\n");
  element_printf("P = %B\n", P);
  element_printf("Ppub = %B\n", Ppub);


    printf("###########EXTRACT###########\n");
    element_init_G1(Qid, pairing);
  element_init_G1(Sid, pairing);
  printf("Plase enter your ID:");
  scanf("%[ a-zA-Z0-9+*-!.,&*@{}$#]", ID);
  printf("\nID=%s\n", ID);
    getchar();
    get_private_key(ID, pairing, s, Sid);
  get_public_key(ID, pairing, Qid);
  printf("##########ENCRPTION##########\n");
    printf("\nPlase enter the message to encrypt:");
  scanf("%[ a-zA-Z0-9+*-!.,&*@{}$#]", message);
  getchar();
  printf("The original message=%s", message);

    sha_fun(message, shamessage);   //Get the message digest
  printf("\nThe message hash=%s\n", shamessage);

    element_init_G1(U, pairing);
  encryption(shamessage, ID, P, Ppub, U, xor_result, pairing);
  printf("Send <U,V> to the receiver!\n");

  printf("##########DECRYPTION##########");
  decryption(Sid, pairing, U, xor_result, xor_result_receiver);
  printf("\nThe recovery message digest is %s\n", xor_result_receiver);
  printf("The original message digest is %s\n", shamessage);

  if (strcmp(xor_result_receiver, shamessage) == 0) {

    printf("Yeah!The message has been decrpted!\n");
  }

  else {
    printf("Oops!The message can not be decrpted!\n");
  }

  //Free space
  element_clear(P);
  element_clear(Ppub);
  element_clear(Qid);
  element_clear(Sid);
  element_clear(U);
  element_clear(s);
  pairing_clear(pairing);

  return 0;
}
intmain()
{
字符qbits[5];
碳轨道[5];
字符ID[大小];//用户ID
char message[SIZE];//用户消息
char shamessage[SIZE];//输入消息摘要(sha1结果)
char xor_result[SIZE];//发送方异或结果--V
char xor_result_receiver[SIZE];//receiver xor result
memset(xor_结果,0,sizeof(char)*大小);
memset(异或结果接收器,0,大小(字符)*大小);
配对\u t配对;//双线性映射对
元素P,Ppub,s,U,Qid,Sid;
mpz_t messagehash;
mpz_init(messagehash);
printf(“设置”;
printf(“请输入打点:”);
scanf(“%[0-9]”,rbits);
getchar();
printf(“\n请输入qbits:”);
扫描频率(“%[0-9]”,qbits);
getchar();
设置系统(atoi(rbits)、atoi(qbits)、P、Ppub、配对、s);
printf(“系统参数已设置!\n”);
元素printf(“P=%B\n”,P);
元素_printf(“Ppub=%B\n”,Ppub);
printf(“摘录”);
元素_init_G1(Qid,配对);
元素_init _G1(Sid,配对);
printf(“请输入您的ID:”);
scanf(“%[a-zA-Z0-9+*-!,&*@{}$#]”,ID);
printf(“\nID=%s\n”,ID);
getchar();
获取私钥(ID、配对、s、Sid);
获取公共密钥(ID、配对、Qid);
printf(“拼音”;
printf(“\n请输入要加密的消息:”);
scanf(“%[a-zA-Z0-9+*-!,&*@{}$#]”,消息);
getchar();
printf(“原始消息=%s”,消息);
sha_fun(message,shammessage);//获取消息摘要
printf(“\n消息哈希=%s\n”,消息);
元素_init_G1(U,配对);
加密(消息、ID、P、Ppub、U、xor_结果、配对);
printf(“发送给接收方!\n”);
printf(“解密”);
解密(Sid、配对、U、异或结果、异或结果接收器);
printf(“\n恢复消息摘要为%s\n”,xor\u结果\u接收器);
printf(“原始消息摘要为%s\n”,消息摘要);
if(strcmp(异或结果接收器,消息)==0){
printf(“是的!消息已被删除!\n”);
}
否则{
printf(“哎呀!消息不能被删除!\n”);
}
//自由空间
元素u清晰(P);
元素_clear(Ppub);
元素_清除(Qid);
元素清除(Sid);
元素U清晰(U);
元素_clear(s);
配对\u清除(配对);
返回0;
}
我的输出是一个消息摘要,但我需要它是纯文本

############SETUP############
Please enter rbits:6

Please enter qbits:6
System parameters have been set!
P = [456, 103]
Ppub = [176, 88]
###########EXTRACT###########
Plase enter your ID:friedrich12

ID=friedrich12
Private key Sid = [184, 383]

Public key Qid = [99, 84]
##########ENCRPTION##########

Plase enter the message to encrypt:code
The original message=code
The message hash=E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
U = [456, 103]
Public key Qid = [99, 84]

V=3D958162F64322BFC65D7655DFE6B61D89945F35
Send <U,V> to the receiver!
##########DECRYPTION##########
The recovery message digest is E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
The original message digest is E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
Yeah!The message has been decrpted!
设置############
请输入打点:6
请输入qbits:6
系统参数已设置!
P=[456103]
Ppub=[176,88]
###########提取###########
请输入您的ID:friedrich12
ID=friedrich12
私钥Sid=[184383]
公钥Qid=[99,84]
##########吸收##########
请输入要加密的消息:代码
原始消息=代码
消息哈希=E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
U=[456103]
公钥Qid=[99,84]
V=3D958162F64322BFC65D7655DFE6B61D89945F35
发送给接收者!
##########解密##########
恢复消息摘要为E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
原始消息摘要是E6FB06210FAFC02FD7479DDBED2D042CC3A5155E
是 啊消息已被删除!

首先,从消息摘要中恢复原始消息在数学上是不可能的。消息摘要是一小量的信息,用作大量信息的指纹。例如,在一种最简单的形式中,消息摘要可能只是消息中字符的数值之和。显然,您无法仅从原始消息的字符总数中恢复原始消息。(两条字谜信息的总和相同,因此总和不会告诉您这两条信息中的哪一条是原始信息。通过增加一个字符并减少另一个字符来更改的信息的总和与原始信息的总和相同,因此,总和不会区分它们。)这只是一个例子,实际的加密哈希比简单和更复杂

其次,加密散列和它们产生的消息摘要通常被设计成难以反转的。很难找到任何摘要等于给定值的消息


如果您想要加密函数将消息更改为加密形式,然后将其反转,那么您需要的是加密和解密,而不是散列或摘要。

首先,从消息摘要中恢复原始消息在数学上是不可能的。消息摘要是一小量的信息,用作大量信息的指纹。例如,在一种最简单的形式中,消息摘要可能只是消息中字符的数值之和。显然,您无法仅从原始消息的字符总数中恢复原始消息。(两条字谜信息的总和相同,因此总和不会告诉您这两条信息中的哪一条是原始信息。通过增加一个字符并减少另一个字符来更改的信息的总和与原始信息的总和相同,因此,总和不会区分它们。)这只是一个例子,实际的加密哈希比简单和更复杂

其次,加密散列和它们产生的消息摘要通常被设计成难以反转的。很难找到任何摘要等于给定值的
消息

如果你想哭