如何为python AES CBC模式编写golang代码?
我试图为下面的支付网关python代码编写golang代码如何为python AES CBC模式编写golang代码?,python,encryption,go,cryptography,ccavenue,Python,Encryption,Go,Cryptography,Ccavenue,我试图为下面的支付网关python代码编写golang代码 def pad(data): length = 16 - (len(data) % 16) data += chr(length)*length return data def encrypt(plainText, workingKey): iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f' plainT
def pad(data):
length = 16 - (len(data) % 16)
data += chr(length)*length
return data
def encrypt(plainText, workingKey):
iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
plainText = pad(plainText)
encDigest = md5.new ()
encDigest.update(workingKey)
enc_cipher = AES.new(encDigest.digest(), AES.MODE_CBC, iv)
encryptedText = enc_cipher.encrypt(plainText).encode('hex')
return encryptedText
下面是相关的golang代码
func Pad(text string) string {
length := aes.BlockSize - (len(text) % aes.BlockSize)
pad := string(length)
for i := 0; i < length; i++ {
text += pad
}
return text
}
func Encrypt(text, key string) string {
iv := "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
text = Pad(text)
h := md5.New()
h.Write([]byte(key))
block, err := aes.NewCipher([]byte(fmt.Sprintf("%x", h.Sum(nil))))
if err != nil {
return "ollo"
}
ciphertext := make([]byte, len([]byte(text)))
mode := cipher.NewCBCEncrypter(block, []byte(iv))
mode.CryptBlocks(ciphertext, []byte(text))
return fmt.Sprintf("%x", ciphertext)
}
此处密文和加密文本不匹配。有什么问题吗?md5使用钥匙是有史以来最糟糕的主意!您正在将加密函数的域缩减为有限集!!!Python摘要方法似乎返回校验和原始值,即16个字符字节的字符串。在Go中,您正在使用%x格式化校验和,这将是不同的。但不确定这是否是唯一的问题。James说:Python使用的是已消化密钥的原始字节,而Go使用的是将其转换为十六进制。Python encryptx,y返回e7ab4afaff5922927868be0eb177f9a7。必须从Crypto.Cipher导入AES并导入md5才能运行它。取出Sprintf后,Go Encryptx,y返回相同的结果。呃,这里是必须的游乐场链接:谢谢JamesHenstridge,twotwotwo,这解决了我的问题@tomwilde,实际上我正在为我的应用程序实现ccavenue的支付网关,因为他们没有Golang的包。