gpt4 book ai didi

python - 如何使用 AES 加密和解密从 Scala 到 Python

转载 作者:行者123 更新时间:2023-12-04 15:23:10 25 4
gpt4 key购买 nike

我在 Scala 中有一个代码,其中有我的加密和解密代码,它工作正常,代码是:

import java.util.Base64
import javax.crypto.Cipher
import javax.crypto.spec.{IvParameterSpec, SecretKeySpec}
class Encryption {
val key = "enIntVecTest2020"
val initVector = "encryptionIntVec"

def encrypt(text: String): String = {

val iv = new IvParameterSpec(initVector.getBytes("UTF-8"))
val skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES")

val cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv)

val encrypted = cipher.doFinal(text.getBytes())
return Base64.getEncoder().encodeToString(encrypted)
}

def decrypt(text:String) :String={
val iv = new IvParameterSpec(initVector.getBytes("UTF-8"))
val skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES")

val cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING")
cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv)
val original = cipher.doFinal(Base64.getDecoder.decode(text))

new String(original)
}
}

val encryptobj = new Encryption()
val pwd = "#test@12345"
val result =encryptobj.encrypt(pwd)
密码:字符串 = #test@12345
结果:String = lHhq1OzMSYnj+0XxiNzKhQ==
val pwd1  = encryptobj.decrypt(result)
println(pwd1)
pwd1:字符串 = #test@12345
#test@12345
我尝试在 Python 中实现相同但没有给出预期的加密结果,这是我的代码(我得到了其他类似答案的帮助):
from hashlib import sha256
import base64
from Crypto import Random
from Crypto.Cipher import AES

BS = 16
pad = lambda s: bytes(s + (BS - len(s) % BS) * chr(BS - len(s) % BS), 'utf-8')
unpad = lambda s : s[0:-ord(s[-1:])]

class AESCipher:

def __init__( self, key ):
self.key = bytes(key, 'utf-8')

def encrypt( self, raw ):
raw = pad(raw)
iv = "encryptionIntVec".encode('utf-8')
cipher = AES.new(self.key, AES.MODE_CBC, iv )
return base64.b64encode( iv + cipher.encrypt( raw ) )

def decrypt( self, enc ):
enc = base64.b64decode(enc)
iv = enc[:16]
cipher = AES.new(self.key, AES.MODE_CBC, iv )
return unpad(cipher.decrypt( enc[16:] )).decode('utf8')

cipher = AESCipher('enIntVecTest2020')
encrypted = cipher.encrypt('#test@12345')
decrypted = cipher.decrypt(encrypted)

print(encrypted)
b'ZW5jcnlwdGlvbkludFZlY5R4atTszEmJ4/tF8YjcyoU='
正如您所看到的,加密都不正确,我不知道我做错了什么。请帮助在python中实现与scala中显示的相同的加密结果,我将不胜感激。

最佳答案

感谢@Topaco 的回答,经过一番搜索,它奏效了。

import base64
from Crypto.Cipher import AES

BS = 16
pad = lambda s: bytes(s + (BS - len(s) % BS) * chr(BS - len(s) % BS), 'utf-8')
unpad = lambda s : s[0:-ord(s[-1:])]
class AESCipher:

def __init__( self, key ):
self.key = bytes(key, 'utf-8')

def encrypt( self, raw ):
raw = pad(raw)
iv = "encryptionIntVec".encode('utf-8')
cipher = AES.new(self.key, AES.MODE_CBC, iv )
return base64.b64encode(cipher.encrypt( raw ) )
def decrypt( self, enc ):
iv = "encryptionIntVec".encode('utf-8')
enc = base64.b64decode(enc)
cipher = AES.new(self.key, AES.MODE_CBC, iv )
return unpad(cipher.decrypt( enc )).decode('utf8')
cipher = AESCipher('enIntVecTest2020')
encrypted = cipher.encrypt('#test@12345')
print(encrypted.decode('utf-8'))
-> lHhq1OzMSYnj+0XxiNzKhQ==
decrypted = cipher.decrypt(encrypted)
print(decrypted)
-> #test@12345

关于python - 如何使用 AES 加密和解密从 Scala 到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62873401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com