使用Python解密IBM生成的JWE时遇InvalidUnwrap错误求助
解密IBM产品生成的JWE时遇到InvalidUnwrap错误
相关示例
JWE: eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiQTI1NktXIiwiY3R5IjoiSldUIn0.5Dx7B_0XI8F2ZZzkHjiJkeNsw11LlOuMzln9Z6OuGCAMpLeCOXnnPw.VEV_6HmnlroYO483zJdHFw.jS97NRZaPQfO46J9UvG9YsQ0po2SnUJuCe7M9VNIghD8lyUgdqaGx6xXH6MnAD01VLbjYROwh0z8CFGQ5PbamoiNxzMGM3UHDqvKU4j1pdRkcyPZbyZ6oo-NtY5dlwT6FhMMgu3kk7JKaFKXz0mhyNnvx22QTHKWHpMReEuc4AwdeDBL47iX8kT9cyqBzlGWKl-jLvEM73gUzPLC8RxG9_mtyIzEqyiGWtbDavD4yqf7lgo39jBIvwBu-VDVW05A.o15bGBayvRp9Dgzlqd2WAw JWK: { "alg": "A256KW", "kty": "oct", "use": "enc", "k": "hD-S5Ll-StGTM6K0N891J3KdAgLVdUNRuKCpiweXJh8", "kid": "test"}
我的Python3代码
import base64 from cryptography.hazmat.backends import default_backend from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives.keywrap import aes_key_unwrap encrypted_jwe = ('eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiQTI1NktXIiwiY3R5IjoiSldUIn0' '.5Dx7B_0XI8F2ZZzkHjiJkeNsw11LlOuMzln9Z6OuGCAMpLeCOXnnPw.VEV_6HmnlroYO483zJdHFw' '.jS97NRZaPQfO46J9UvG9YsQ0po2SnUJuCe7M9VNIghD8lyUgdqaGx6xXH6MnAD01VLbjYROwh0z8CFGQ5PbamoiNxzMGM3UHDqvKU4j1pdRkcyPZbyZ6oo-NtY5dlwT6FhMMgu3kk7JKaFKXz0mhyNnvx22QTHKWHpMReEuc4AwdeDBL47iX8kT9cyqBzlGWKl-jLvEM73gUzPLC8RxG9_mtyIzEqyiGWtbDavD4yqf7lgo39jBIvwBu-VDVW05A.o15bGBayvRp9Dgzlqd2WAw') jwk = { "kty": "oct", "k": "hD-S5Ll-StGTM6K0N891J3KdAgLVdUNRuKCpiweXJh8" } parts = encrypted_jwe.split('.') if len(parts) != 5: print("invalid JWE") exit(1) header, encrypted_key, iv, ciphertext, tag = parts cek_encrypted = base64.urlsafe_b64decode( encrypted_key + '=' * (-len(encrypted_key) % 4)) cek_key = base64.urlsafe_b64decode(jwk['k'] + '=' ) cek = aes_key_unwrap(cek_key, cek_encrypted) print("decrypted CEK:", cek) decoded_ciphertext = base64.urlsafe_b64decode(ciphertext + '=' * (-len(ciphertext) % 4)) decoded_iv = base64.urlsafe_b64decode(iv + '=' * (-len(iv) % 4)) cipher = Cipher(algorithms.AES(cek), modes.CBC(decoded_iv), backend=default_backend()) decryptor = cipher.decryptor() decrypted_payload = decryptor.update(decoded_ciphertext) + decryptor.finalize() print("decrypted Payload:", decrypted_payload)
我认为的解密步骤
- 对JWK对象的k值进行Base64解码
- 对加密后的CEK进行Base64解码,并用步骤1得到的密钥通过A256KW解密
- 使用解密后的CEK创建AES128CBC解密器,结合解码后的IV解密Base64解码后的密文
运行错误
cryptography.hazmat.primitives.keywrap.InvalidUnwrap
请问我哪里出错了?急需一份能完成该任务的Python基准脚本,感谢帮助。
内容的提问来源于stack exchange,提问作者docdev
相关产品推荐
相关产品推荐

