我目前正在玩《暴力Python》一书中的示例。你可以在这里看到我的实现
我现在正在尝试在Go中实现相同的脚本以比较性能,请注意我对Go来说是全新的。打开文件并遍历各行很好,但是我无法弄清楚如何使用“ crypto”库以与Python的crypt.crypt(str_to_hash,salt)相同的方式对字符串进行哈希处理。我想可能是这样的
import "crypto/des" des.NewCipher([]byte("abcdefgh"))
但是,没有雪茄。任何帮助将不胜感激,因为将Go的并行性能与Python的多线程进行比较非常有趣。
编辑: crypt.crypt的Python文档
crypt 非常容易用cgo包装,例如
crypt
package main import ( "fmt" "unsafe" ) // #cgo LDFLAGS: -lcrypt // #define _GNU_SOURCE // #include <crypt.h> // #include <stdlib.h> import "C" // crypt wraps C library crypt_r func crypt(key, salt string) string { data := C.struct_crypt_data{} ckey := C.CString(key) csalt := C.CString(salt) out := C.GoString(C.crypt_r(ckey, csalt, &data)) C.free(unsafe.Pointer(ckey)) C.free(unsafe.Pointer(csalt)) return out } func main() { fmt.Println(crypt("abcdefg", "aa")) }
运行时会产生这个
aaTcvO819w3js
与python相同 crypt.crypt
crypt.crypt
>>> from crypt import crypt >>> crypt("abcdefg","aa") 'aaTcvO819w3js' >>>
(已更新,以释放CStrings-感谢@ james-henstridge)