当前位置: 首页 > 知识库问答 >
问题:

aes加密在使用Kotlin的android studio中不起作用?

上官淮晨
2023-03-14

我的代码
,,,

    //key genration
    val keygen = KeyGenerator.getInstance("AES")
    keygen.init(256)
    val key = keygen.generateKey()

    keyTV.setText(key.toString())

    encryptbtn.setOnClickListener(View.OnClickListener {
        val plaintext = message.text.toString()

        // object of cipher
        val cipher = Cipher.getInstance("AES")
        cipher.init(Cipher.ENCRYPT_MODE,key)

        // encrypted message
        val ciphertext = cipher.doFinal(plaintext.toByteArray())

        encryptMsgTV.setText(ciphertext.toString())
    })

    decryptbtn.setOnClickListener(View.OnClickListener {
        val ciphertext = encryptMsgTV.text.toString()

        val decipher = Cipher.getInstance("AES")
        decipher.init(Cipher.DECRYPT_MODE,key)

        val plaintext = decipher.doFinal(ciphertext.toByteArray())
        decryptMsgTV.setText(plaintext.toString())
    })

,,,

错误:-javax.crypto.IllegalBlockSizeException:解密中的最后一个块不完整
为什么iam收到错误,我的代码有什么问题

共有1个答案

笪健
2023-03-14

这是我的解决方案实现'commons-codec:commons-codec:1.11'

private fun decrypt(plainText: String): String? {
        val cipher = Cipher.getInstance("AES/ECB/NoPadding")
        val key: SecretKey = SecretKeySpec(hexToByteArray(keyHex), "AES")
        cipher.init(Cipher.DECRYPT_MODE, key)
        val result = cipher.update(hexToByteArray(plainText))
        val text = String(Hex.encodeHex(result))
        val finalText = String(hexToByteArray(text)!!)
        return finalText.trim { it <= ' ' }
    }

    fun hexToByteArray(s: String?): ByteArray? {
        require(!(s == null || s.length % 2 == 1))
        val chars = s.toCharArray()
        val len = chars.size
        val data = ByteArray(len / 2)
        var i = 0
        while (i < len) {
            data[i / 2] =
                ((Character.digit(chars[i], 16) shl 4) + Character.digit(
                    chars[i + 1],
                    16
                )).toByte()
            i += 2
        }
        return data
    }
 类似资料:
  • 我做了一个简单的文件加密/解密器。它将模式和要操作的文件作为参数。加密时,它生成随机字符串并使用该字符串加密文件。解密文件时,它会提示用户输入密码,并在解密时使用该密码。 我的问题是,解密时得到的不是明文,而是胡言乱语,尽管我小心翼翼地将相同的密钥写入输入。 非常感谢James K Polk提供的加密/解密代码!

  • 我正在尝试加密用于建立和连接到ActiveMQ队列的密码。我正在跟进这里的步骤,我能够使用新的activemq-security.xml文件启动ActiveMQ。我有一个脚本试图创建并连接到队列,但我不断收到用户名或密码无效的错误。 我为消费者用户加密了密码,并将加密的密码存储在credentials-enc.properties文件中,如下所示: 我尝试了不同的方法,我确信由于某种原因,cred

  • 问题内容: 我似乎找不到使用AES 128位加密的漂亮示例。 有人有示例代码吗? 问题答案: 如果您只想使用内置的加密提供程序RijndaelManaged,请查看以下帮助文章(它也有一个简单的代码示例): http://msdn.microsoft.com/zh-CN/library/system.security.cryptography.rijndaelmanaged.aspx 以防万一您急

  • 我已经设法使它能够处理不包含og a-zA-Z0-9之外的字符和一些特殊字符的文本,但如果我使用丹麦字母,如ielouangØ,解密的文本会显示?而不是实际的字母。所有文件都保存为UTF-8,头字符集=UTF-8 Javascript - input: "tester for php: 我试过选项0,OPENSSL_ZERO_PADDING和OPENSSL_RAW_DATA,结果相同。有人能帮我吗

  • 我正在尝试使用Javascript和CryptoJS复制Java应用程序中使用的加密。我不太确定应该如何复制SecretKeySpec,因为CryptoJS似乎需要一个字符串作为密钥。 下面是我需要在JS中复制的Java加密代码: 到目前为止,我的JS代码: 此外,密码的最终输出是一个加密的字节数组。CryptoJS的最终输出似乎是一个带有密文的对象。有没有办法以字节数组的形式获取输出? 我现在唯

  • 问题内容: 我的问题是,我无法在Java中正确解密。尽管使用了正确的密钥和IV,解密后我仍然得到垃圾字符。我在Java中没有任何编译/运行时错误或异常,因此我相信我使用正确的参数进行解密。 Python加密代码- Java解密代码- 有什么明显的我想念的东西吗? 问题答案: 的操作的密码反馈(CFB)模式是模式家族。它由段大小(或寄存器大小)参数化。PyCrypto的默认段大小为8位,而Java(