【问题标题】:How can I decrypt text in kotlin, encrypted in nodejs?如何解密 kotlin 中的文本,在 nodejs 中加密?
【发布时间】:2020-06-23 03:05:13
【问题描述】:

我正在尝试解密使用 nodejs 加密的文本。简单地说,我试图从服务器端加密数据,并在调用 API 时将其解密到客户端。

这是我在服务器端的代码。

function encrpt(text) {
    const seckey = '12345678123456781234567812345678';

    var aesDec = crypto.createCipheriv("aes-256-ecb", seckey , '');
    var output = aesDec.update(text, 'utf8', 'hex');
    output += aesDec.final('hex');

    return output;
}

这是我在客户端用于解密的代码,它位于 Kotlin 中。

fun String.test() {
    val skc = SecretKeySpec("12345678123456781234567812345678".toByteArray(Charsets.UTF_8), "AES")

    val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
    cipher.init(Cipher.DECRYPT_MODE, skc)
    val result = cipher.doFinal(this.toByteArray())

    println(result.toString())
}   

但是这样做我在 android studio 中得到了javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT

【问题讨论】:

    标签: javascript android node.js kotlin encryption


    【解决方案1】:

    你可以这样使用:

    init{
       cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
       secretKeySpec = SecretKeySpec(secret.toByteArray(Charsets.UTF_8),"AES")
        }
    
    
    fun decrypt(cipheredText: String?): String? {
    
                val array: ByteArray = Base64.decode(cipheredText, Base64.DEFAULT)
                val encrypted: ByteArray = array.copyOfRange(0, array.size)
                cipher!!.init(
                    Cipher.DECRYPT_MODE,
                    secretKeySpec,
                    IvParameterSpec(iv.toByteArray())
                )
                return String(cipher!!.doFinal(encrypted)).trim()
            }
    

    注意:iv 必须是 16 字节(128 位)

    【讨论】:

    • 我需要导入哪些库才能使用此代码?
    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 2016-03-11
    • 1970-01-01
    • 2019-06-26
    • 2021-06-24
    相关资源
    最近更新 更多