小编Vin*_*tas的帖子

Bouncy Castle 在尝试解密 AES 消息时抛出“OCB 中的 MAC 检查失败”

我需要解密 AES 消息。我能够使其在 python 上工作(使用 pycryptodome 库),但在 kotlin/java 上没有成功。由于解密模式是OCB,而Java默认不支持它,所以我不得不使用Bouncy Castle库。

这是工作的 python 代码:

def decrypt_aes_message(shared_key, encrypted_message):
    encrypted_msg = b64decode(encrypted_message["encryptedMessage"].encode())
    tag = b64decode(encrypted_message["tag"].encode())
    nonce = b64decode(encrypted_message["nonce"].encode())
    cipher = AES.new(shared_key.encode(), AES.MODE_OCB, nonce=nonce)
    return cipher.decrypt_and_verify(encrypted_msg, tag).decode()
Run Code Online (Sandbox Code Playgroud)

这是java代码:

fun decryptAesMessage2(sharedKey: String, encryptedMessageData: Map<String, String>): ByteArray {
    var encryptedMessage = encryptedMessageData["encryptedMessage"]!!.utf8Base64Decode()
    var tag = encryptedMessageData["tag"]!!.utf8Base64Decode()
    var nonce = encryptedMessageData["nonce"]!!.utf8Base64Decode()

    var key = KeyParameter(sharedKey.toByteArray(Charsets.UTF_8))
    var params = AEADParameters(key, tag.size*8, nonce)
    var cipher = OCBBlockCipher(AESEngine(), AESEngine())

    cipher.init(false, params)

    val out = ByteArray(cipher.getOutputSize(encryptedMessage.size))
    var offset = cipher.processBytes(encryptedMessage, 0, …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle aes kotlin

3
推荐指数
1
解决办法
174
查看次数

标签 统计

aes ×1

bouncycastle ×1

java ×1

kotlin ×1