python密码解密失败

2024-10-02 06:26:22 发布

您现在位置:Python中文网/ 问答频道 /正文

byte[] decoded = Base64.getDecoder().decode(encodedString);
GCMParameterSpec initialVector = new GCMParameterSpec(16 * 8, Arrays.copyOf(decoded, 16));
SecretKeySpec skeySpec = new SecretKeySpec(Base64.getDecoder().decode(key), "AES");
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skeySpec, initialVector);
byte[] decrypted = cipher.doFinal(Arrays.copyOfRange(decoded, 16, decoded.length));
return new String(decrypted, UTF_8);

尝试为上面的代码编写等效的python代码。我有以下,但与填充特殊字符

def decrypt(ciphertext, key):
    decoded_text = base64.b64decode(ciphertext)
    key = base64.b64decode(key)
    iv, ciphertext = decoded_text[:16], decoded_text[16:]
    cipher = AES.new(key, AES.MODE_GCM, iv)
    return cipher.decrypt(ciphertext)

尝试使用以下测试数据

encodedString = "828OCywY/fz6UbNgdKm6kt7Sag21tu0RJC/Xal3vStGBG9XU89w="
key = "2/2Qhzrz1+9YbvafpTaGUH3tHrxwFVwenqVQOlXyNWI="
expected = "AU5432"

but getting "b'AU5432JS\x9eG|2*&\xae\xe6 \x02\xd1\xe55e'". Tried to encode but failed

Any help please ?

Tags: keytextnewbyteaescipherdecodeddecode
2条回答

让它工作-认为这可能对其他人有用

def decrypt(encoded_value, key:str):
    decoded_text = base64.b64decode(encoded_value)
    decoded_key = base64.b64decode(key)
    nonce, tag = decoded_text[:16], decoded_text[-16:]
    cipher = AES.new(decoded_key, AES.MODE_GCM, nonce)
    return cipher.decrypt_and_verify(decoded_text[16:-16], tag)

这是我不久前写的东西。有效:)

import base64

from Crypto.Cipher import AES
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import ec
from cryptography.hazmat.primitives import padding, serialization

class AESCipher2(object):
    def __init__(self, key, vector):
        self.key = key
        self.init_vector = vector

    def encrypt(self, payload, hashed=False):
        padder = padding.PKCS7(128).padder()

        padded_payload = padder.update(payload)
        padded_payload += padder.finalize()

        cipher = AES.new(self.key, AES.MODE_CBC, self.init_vector)

        if hashed:
            return base64.b64encode(cipher.encrypt(padded_payload))
        else:
            return cipher.encrypt(padded_payload)

    def decrypt(self, payload, hashed=False):
        unpadder = padding.PKCS7(128).unpadder()

        if hashed:
            payload = base64.b64decode(payload)

        cipher = AES.new(self.key, AES.MODE_CBC, self.init_vector)

        decrypted_message = cipher.decrypt(payload)

        unpadded_payload = unpadder.update(decrypted_message)
        unpadded_payload = unpadded_payload + unpadder.finalize()

        return unpadded_payload

相关问题 更多 >

    热门问题