Хранение хэш-значений из SHA256

Я использую этот код и не могу сохранить вывод хэш-функции в массив char. Можете ли вы мне помочь, как это сделать?

#include "sha256.h"
#include <Arduino.h>
#include "./printf.h"

void printHash(uint8_t* hash) {
  int i;
  for (i=0; i<32; i++) {
    Serial.print("0123456789abcdef"[hash[i]>>4]);
    Serial.print("0123456789abcdef"[hash[i]&0xf]);
  }
  Serial.println();
}

void setup()
{ String FinalStr="1234567890";
Sha256.init();
  Sha256.print(FinalStr);
  printHash(Sha256.result());
}
void loop()
{


}

, 👍0

Обсуждение

вместо того, чтобы печатать его, поместите его в массив символов - вам, конечно, понадобится массив длиной 64, @Jaromanda X

привет Джароманда, спасибо за твое предложение, я не могу скопировать вывод функции printhash, @Amr Ahmed


2 ответа


0

Сохранить в вектор символов (64 символа + NULL):

void copyHash(char* buf, uint8_t* hash) {
  int i, j = 0;
  for (i = 0; i < 32; i++) {
    buf[j++] = "0123456789abcdef"[hash[i]>>4];
    buf[j++] = "0123456789abcdef"[hash[i]&0xf];
  }
  buf[j] = 0;
}

void setup()
{ 
  String FinalStr="1234567890";
  Sha256.init();
  Sha256.print(FinalStr);
  char buf[65];
  copyHash(buf, Sha256.result());
}

Удачи!

,

привет Микаэль, спасибо за твою помощь, я постараюсь рассказать тебе о результатах, очень признателен, @Amr Ahmed

Я попробовал и получил разные результаты "c775e7b757ede630cd0aa1113bd102661ab38829ca52a6422ab782862f268646 2f64612d9642afc666117f4d4fc87c17dba06ad091e1ce611f70020f2278337e", @Amr Ahmed


1

Вот код, который мне помог:

#include "sha256.h"
void setup(void)
{char encoded[64];
    Serial.begin(9600);

    // на самом деле это тест RFC4231 4.3

    Sha256.init();
    Sha256.print("123");
    uint8_t * result = Sha256.result();

    Serial.println("Expect: 2d711642b726b04401627ca9fbac32f5c8530fb1903cc4db02258717921a4881");
    Serial.print(  "Got   : ");
    for (int i = 0; i < 32; i++) {
            Serial.print("0123456789abcdef"[result[i] >> 4]);
            Serial.print("0123456789abcdef"[result[i] & 0xf]);

            for(int i = 0; i < 64; i+=2)
                {
                  encoded[i] = "0123456789abcdef"[result[i / 2] >> 4];
                  encoded[i + 1] = "0123456789abcdef"[result[i / 2] & 0xf];
                }
    }
    Serial.print("\n");
            for(int z = 0; z < 64; z++)
            Serial.print(encoded[z]);
}

void loop(void)
{}
,

это код, который сработал у меня, @Amr Ahmed