我必须计算XOR加密字符串的SHA-2哈希值。我正在使用RSA BSafe库(非常类似于OpenSSL)。我的XOR函数看起来像这样:
for (int i = 0; i < strlen(combined); i++)
{
encrypted[i] = (combined[i] ^ authkey[i%strlen(authkey)]);
}
这会在char数组中产生一些'\ 0'字符(NullTerminations)。在此之后,我将此加密字符串传递给我的hmac()函数。 现在的问题是,当BSafe HMAC计算字符数组上的哈希时,它不会期望'\ 0'字符介于两者之间。我该如何规避这个问题?即使在OpenSSL中给定w.r.t函数的答案,它们也会有所帮助,因为它们非常相似。
提前致谢!
答案 0 :(得分:2)
使用OpenSSL,您可以显式传递长度。包含NULL的数据无关紧要。
unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
int key_len, const unsigned char *d, int n,
unsigned char *md, unsigned int *md_len);
n 是数据的长度,由 d 指向。显然,您必须自己跟踪*d
的长度,因为strlen
不起作用。如果BSafe的工作方式不同,我会感到震惊。
当然,正如我的评论所说,两次使用一次性垫是非常不安全的。你几乎肯定不应该重新实现加密原语; BSafe没有提供流密码吗?