首页 > 解决方案 > Kotlin 中的 Base64 编码器

问题描述

你能帮我把这个方法从java重构到kotlin吗?我在 return 语句中遇到了 ByteBuffer 的问题。看起来在 Kotlin 中它不是那样工作的。

public String encryptData(Object payload, Key secretKey)
            throws NoSuchAlgorithmException, NoSuchPaddingException, JsonProcessingException, BadPaddingException,
            IllegalBlockSizeException, InvalidAlgorithmParameterException, InvalidKeyException {
        var initialVector = new byte[INITIAL_VECTOR_SIZE];
        secureRandom.nextBytes(initialVector);
        var cipher = Cipher.getInstance(AES_TRANSFORMATION);
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(initialVector));
        var data = cipher.doFinal(objectMapper.writeValueAsString(payload).getBytes());
        var byteBuffer = ByteBuffer.allocate(initialVector.length + data.length);
        return new String(
                Base64.getEncoder()
                        .encode(byteBuffer
                                        .put(0, initialVector)
                                        .put(INITIAL_VECTOR_SIZE, data))
                        .array());
    }

标签: kotlinbase64

解决方案


设置您byteBuffer的 base 64 转换之外更干净。完成此操作后,您可以:

...
return Base64.getEncoder().encodeToString(byteBuffer)

推荐阅读