Scrypt
Scrypt 健全性檢查
我有一個 scrypt 實現,它不會產生與我發現的線上 scrypt 密鑰生成器相同的輸出。例如,如果我在這樣的函式中執行自己的 scrypt:
void test_scrypt(void) { char passwdTxt[] = "abc"; int passwdlen = strlen(passwdTxt); uint8_t passwd[passwdlen]; memcpy(passwd, passwdTxt, passwdlen); uint8_t salt[] = {0x5C,0x57,0xD8,0x6B,0x73,0x5E,0x98,0xD5,0x1A,0xA5,0x34,0x16,0xE2,0x90,0x29,0xAF}; int saltlen = 16; int buflen = 32; uint8_t buf[buflen]; int N = 16384; int r = 8; int p = 1; crypto_scrypt(passwd, passwdlen, salt, saltlen, N, r, p, buf, buflen); int i; printf("Key:\n\r"); for (i = 0; i < buflen; ++i) printf("%02x ", buf[i]); }
它產生以下輸出:
Key: d6 2b 0e 12 75 e3 0a 85 ce 22 03 43 ef 7e e6 d2 97 77 e1 5c 3e 35 03 63 0b fc 54 7b 8f 18 ef 63
但是,當我在站點https://gchq.github.io/CyberChef/?op=Scrypt執行相同的輸入時, 我得到以下結果(注意“輸出”部分與我的雜湊值不同):
這裡有沒有人有他們自己的 Scrypt 生成器,他們可以執行這個輸入條件,並告訴我我的輸出是否正確?
我在想也許我的鹽不太有效,就像我應該只使用每字節 1-128 位(非擴展 ASCII)值?
您的程式碼已計算出正確答案。
scrypt Git 儲存庫中有一些已知答案測試。它們將比 GCHQ 的玩具網路界面更可靠一些,後者顯然有問題(並且每次都會給我不同長度的輸出)。