저는 해시를 생성하고 암호화를 사용하는 완전한 Python 코드를 작성했습니다. 이것은 MS-CHAPV2 GenerateNTResponse()
메서드의 구현이므로 SHA1
, MD4
및 DES
을 사용합니다.Python 해싱 + DES : PyCuda로 마이그레이션
나는 거의 10000000 개의 해시를 처리해야하므로 CUDA를 사용하여 속도를 향상시킬 방법을 찾고있었습니다.
순수 파이썬 버전은 모든 해시의 90 % 정도를 생성하는 데 2 시간 정도 걸립니다.
이제 문제는 : Python 코드를 재사용하고 PyCuda에 적용 할 수 있습니까?
필자는 어떤 종류의 정보도 발견하지 못 했으므로 일부 예제에 따라 PyCuda의 SourceModule
을 사용하여 C에서 수행하려고합니다.
kernel.cu(7): error: calling a host function("SHA1_Init") from a __device__/__ global__ function("operator ") is not allowed
그래서, 내가 아는 한, __device__
선언 함수 만이 SourceModule
에서 사용할 수 있습니다
그러나 여기에는 또 다른 문제가 온다.
하지만 openssl/sha.h
기능으로 어떻게해야합니까?
가 여기에 내가 PyCuda
짧은 대답은import pycuda.driver as drv
import pycuda.autoinit
from pycuda.compiler import SourceModule
from pycuda.elementwise import ElementwiseKernel
mod = SourceModule(
'''
#include <openssl/sha.h>
__global__ void _challengeHash(char* peer_challenge, char* server_challenge, char* username, char* hashResult){
// Object to hold the current state of the hash
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, peer_challenge, 16);
SHA1_Update(&ctx, server_challenge, 16);
SHA1_Update(&ctx, username, strlen(username));
unsigned char hash[SHA_DIGEST_LENGTH];
SHA1_Final(hash, &ctx);
memcpy(hash, hashResult, SHA_DIGEST_LENGTH);
}
''', include_dirs=['/usr/include/'])
sha1 = mod.get_function("_challengeHash")
hash = ""
sha1(drv.In("\x41\x13\xAB\xC5\x45\x31\x2E\x8F\x68\x11\x19\x3B\x0D\x18\x1B\xBD"), drv.In("\x5A\x05\x70\x5D\xC2\x5C\xA1\x51\x23\xC8\xE4\x75\x0B\x80\xD0\xA9"), drv.In("a"), drv.Out(hash))
print hash
실제로 나는 소스가없는 도구를 찾아서 나를 도울 수 없습니다. 당신이 말하는 코드는 단지 SHA1이지만, DES와 MD4도 작동해야합니다. (CUDA5.0 툴킷을 사용하면 컴파일되지 않으며 cutil.h도 없습니다. – StepTNT