- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 C 中的 python ctypes 制作简单的库 blake 哈希函数包装器。但只是为了首先测试我的简单 C 辅助函数是否能正常工作,我编写了小的 python 脚本 blake 哈希函数测试 vector 。我的问题是由这个小脚本引起的。我在几个小时内偶然发现解决这个问题。通过使用这个小助手测试 vector 脚本,我总是得到意想不到的“blake 512 用法”的 64 字节输出值。我意识到,我的问题来自于我在尝试返回 64 个字节的数量(并且应该是精确的)时编写的 c 辅助函数,以便稍后使用这个小的 python ctypes 脚本测试 vector 来使用。
我使用的纯 C 实现源代码是直接从 NIST Blake Submission for Optimized 32bit Processor 下载的,文件名为 blake_opt32.c 和 blake_opt32.h 。可以在这里下载http://csrc.nist.gov/groups/ST/hash/sha-3/Round3/documents/Blake_FinalRnd.zip
这是我的简单 C 辅助函数,稍后将使用 python ctypes 进行调用。
#include <stdio.h>
#include "blake_opt32.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <stdint.h>
BitSequence msg[65];
size_t strlcpy(unsigned char *dst, const char *src, size_t siz)
{
unsigned char *d = dst;
const char *s = src;
size_t n = siz;
/* Copy as many bytes as will fit */
if (n != 0) {
while (--n != 0) {
if ((*d++ = *s++) == '\0')
break;
}
}
/* Not enough room in dst, add NUL and traverse rest of src */
if (n == 0) {
if (siz != 0)
*d = '\0'; /* NUL-terminate dst */
while (*s++)
;
}
return(s - src - 1); /* count does not include NUL */
}
BitSequence * bl(char *input)
{
BitSequence output[65];
BitSequence msg[sizeof(output)];
int dInt;
memset(output,0,sizeof(output));
dInt = strlen(input);
if (dInt > 0xffff){
exit( 1);
}
BitSequence data[dInt];
memset(data, 0, dInt);
strlcpy(data, input, sizeof(data));
DataLength dLen =1152;
Hash(512, data, dLen, output);
int x;
for (x=0;x<64;++x){
printf("%02X",output[x]);
}
memcpy(msg,output,sizeof(output));
//here the problem araised, when trying to return unsigned char or BitSequence value, the unexpected output of small python scipt test vectors value is detected
return msg;
}
简单的小Python脚本测试 vector 就在这里,只需通过将输出重定向到文件的任何文本来尝试这个小脚本,稍后就会捕获意外的值。
from ctypes import *
from string import printable
from itertools import permutations
from random import *
d = CDLL('blake.dll') #edit here your own dll or .so library
d.bl.restype = c_char_p
print '[+] Simple Test-vectors Blake hash function\n'
s = SystemRandom()
for x in permutations(printable):
p = ''.join(map(str,x))
q = list(p)
s.shuffle(q)
r= d.bl(''.join(map(str,q)))
if ((len(r)*2) != 0x80):
print '\n[-] Not persistent value of 64 bytes was detected : %d'% len(r)
w = r.encode('hex')
print w, '-->', len(w)
print '\n'
elif ((len(r)*2) == 0x80):
print '\n',len(r), '\n',r.encode('hex')
print '\n'
因此,对我上面的辅助 C 函数进行任何更正,以便稍后使用这个小型 Python 脚本测试 vector 进行调用,以便获得预期的输出值,我们将不胜感激,之前非常感谢!顺便说一句,上面是更新的代码。
最佳答案
在函数BitSequence * bl(char *input)
的最后,返回值output
是一个局部变量,函数退出后将不存在。
关于python - 使用 ctypes 模块将 blake 哈希函数 C 实现包装到 Python 中,还包括简单的 python ctypes testvector 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10215595/
我在并行化方面遇到了很大的问题 BLAKE使用 OMP。他们在规范中建议可以并行化“列步”和“对角线步”。我尝试这样做,但结果与我预期的相反(比单线程慢 10 倍)。我需要更多有经验的 OMP 用户的
是否有人知道或有关于 Blake-512 hashing algorithm 的开放实现的示例?为 JavaScript 编写和优化? 最佳答案 我最近写了一个这个算法的JS实现。源代码可在此处获得:
我正在尝试使用 C 中的 python ctypes 制作简单的库 blake 哈希函数包装器。但只是为了首先测试我的简单 C 辅助函数是否能正常工作,我编写了小的 python 脚本 blake 哈
我是一名优秀的程序员,十分优秀!