我正在做一个我需要随机生成哈希数字的项目。
代码必须如下工作。
随机函数生成一个随机数,这些数字与一个字符串连接,然后生成该字符串的哈希值,即每次生成一个数字时,也会生成该数字的哈希值,这必须是循环的。使用名为SpritzCipher的库生成哈希。
这段代码的问题在于它会生成单词" random"的哈希值。而不是使用String(salt)的值的串联的散列。
这是我做的代码:
df.D = df.groupby(['A','B','C'])['D'].apply(lambda x: x.fillna(x.mean()))
答案 0 :(得分:1)
许多散列代码只是两个不同的散列字节数组并将其与已知散列进行比较的示例。
由于您只需要计算哈希值,您只需要调用spritz_hash
。
至于字符串生成,更有效的方法是使用低级C ++函数,因为String
对象使用动态内存分配和can cause memory problems。
#include <SpritzCipher.h>
#define hex_char(n) ((n) < 10 ? '0' + (n) : 'A' + ((n)-10))
const char salt[] = "fkllrnjnfd";
char string[13] = "";
byte hash[32]; // byte hash
char hash_string[65]; // hex string hash
void randomico(char *string)
{
int randNumber = random(100); // Draw a number from 0 to 99
itoa(randNumber, string, 10); // convert int into char array
strcat(string, salt); // concatenate salt
}
void bytes_to_hexstr(char *string, byte *bytes, int size)
{
for (int i = 0; i < size; i++)
{
string[i*2] = bytes[i] < 16 ? '0' : hex_char((bytes[i] >> 4) & 0xF);
string[i*2+1] = hex_char(bytes[i] & 0xF);
}
string[size*2] = 0;
}
void setup()
{
Serial.begin(115200);
while (!Serial);
randomSeed(analogRead(0)); // Starts the list of random values
}
void loop()
{
randomico(string); // generate random salted string into 'string' variable
spritz_hash(hash, 32, (byte*)string, strlen(string)); // hash 'string' into 'hash' variable (hash only the character inside the string not the full char array)
bytes_to_hexstr(hash_string, hash, 32); // convert byte hash into printable hex string
// print out string and hash
Serial.print(string);
Serial.print(" -> ");
Serial.println(hash_string);
delay(1000);
}
但如果您真的想使用String
,可以这样做:
String str = String(random(100))+salt;
spritz_hash(hash, 32, (byte*)str.c_str(), str.length());