i concat versuchen, einen Code zu schreiben, der meine Daten zu verschlüsseln, dann versuche ich mir Code auszuführen bekomme ich eine Fehlermeldung:AWS encrypt Typeerror: kann nicht str Bytes
import base64
import boto3
from Crypto.Cipher import AES
PAD = lambda s: s + (32 - len(s) % 32) * ' '
def get_arn(aws_data):
return 'arn:aws:kms:{region}:{account_number}:key/{key_id}'.format(**aws_data)
def encrypt_data(aws_data, plaintext_message):
kms_client = boto3.client(
'kms',
region_name=aws_data['region'])
data_key = kms_client.generate_data_key(
KeyId=aws_data['key_id'],
KeySpec='AES_256')
cipher_text_blob = data_key.get('CiphertextBlob')
plaintext_key = data_key.get('Plaintext')
# Note, does not use IV or specify mode... for demo purposes only.
cypher = AES.new(plaintext_key, AES.MODE_EAX)
encrypted_data = base64.b64encode(cypher.encrypt(PAD(plaintext_message)))
# Need to preserve both of these data elements
return encrypted_data, cipher_text_blob
def main():
# Add your account number/region/KMS Key ID here.
aws_data = {
'region': 'eu-west-1',
'account_number': '70117777xxxx',
'key_id': 'xxxxxxx-83ac-4b5e-93d4-xxxxxxxx',
}
# And your super secret message to envelope encrypt...
plaintext = b'Hello, World!'
# Store encrypted_data & cipher_text_blob in your persistent storage. You will need them both later.
encrypted_data, cipher_text_blob = encrypt_data(aws_data, plaintext)
print(encrypted_data)
if __name__ == '__main__':
main()
dies ein Fehler ist:
PAD = Lambda s: s + (32 - len (s)% 32) * '' Typeerror: str Bytes vielleicht nicht wer wissen, wo ein Problem ist, verketten kann? bitte vorschlagen
Oh, es funktioniert !! danke, vielleicht weißt du, welchen modus ich zum verschlüsseln dieser string benötige ??? cypher = AES.new (plaintext_key, AES.MODE_EAX) dann benutze ich das, ich bekomme: TypeError: Nur Byte-Strings können an C-Code übergeben werden, ich versuche, viele aes.mode aber nichts zu verwenden .. :( – Andrej
Happy es funktioniert In diesem Fall kann man meine Lösung akzeptieren;) In Bezug auf Ihre zweite Frage haben Sie wahrscheinlich das umgekehrte Problem: Sie übergeben eine "Zeichenkette", wenn die AES-Funktion "Bytes" erwartet. Versuchen Sie, die AES-Funktion mit 'plaintext_key.encode ('utf-8')' aufzurufen, um zu sehen, ob dadurch das Problem behoben wird. – pills
Akzeptiert !!! Kannst du mich bitte mit Modus hlplp? – Andrej