SHA1 消息摘要到纯文本

0 c encryption sha

如何将我的消息摘要转换为纯文本(取回原始消息)。我使用以下函数计算消息摘要。SHA1 代码可以在https://github.com/tylabs/quicksand_lite/blob/master/sha1.c 中找到我找不到可以为我进行转换的函数。有没有什么算法可以做到这一点?

我也在尝试解密和加密消息,这就是问题的来源。

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;
}
Run Code Online (Sandbox Code Playgroud)

我的输出是一个消息摘要,但我需要它是纯文本。

############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!
Run Code Online (Sandbox Code Playgroud)

Eri*_*hil 5

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

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

如果您想要将消息更改为神秘形式然后将其反转的加密函数,您正在寻找加密解密,而不是散列或摘要。