Java 隐写术中随机lsb位的存取

Java 隐写术中随机lsb位的存取,java,aes,steganography,Java,Aes,Steganography,我想做音频隐写术。在将数据隐藏在音频中之前,我用aes加密数据,然后在lsb中按顺序字节嵌入位。恢复和aes解密工作正常 但如果我尝试lsb的随机位,则会产生以下错误: ->线程主javax.crypto.BadPaddingException中的异常:给定的最后一个块没有正确填充 错误指向 public byte[] decr**strong text**yptText(byte[] byteCipherText,Key secKey) throws Exception { /

我想做音频隐写术。在将数据隐藏在音频中之前,我用aes加密数据,然后在lsb中按顺序字节嵌入位。恢复和aes解密工作正常

但如果我尝试lsb的随机位,则会产生以下错误:

->线程主javax.crypto.BadPaddingException中的异常:给定的最后一个块没有正确填充

错误指向

public byte[] decr**strong text**yptText(byte[] byteCipherText,Key secKey) throws Exception {
        // AES defaults to AES/ECB/PKCS5Padding in Java 7
        Cipher aesCipher = Cipher.getInstance("AES");
        aesCipher.init(Cipher.DECRYPT_MODE, secKey);
        byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
请参阅,请注意,PKCS5对于PKCS7 WRT AES是一个误称,因为AES实现开发人员懒得包含正确的选项名

因为PKCS7填充有格式要求,并且几乎没有字节序列~1^16+2^16+…+15^16在256^16个可能的字节序列中形成正确填充随机字节形成有效PKCS7填充的可能性非常小

您最好使用CTR模式,它不需要填充,只需要为每个加密设置一个唯一的密钥/计数器对


您确定提取了嵌入的所有正确字节吗?您只向我们显示了3行代码,这可能会引发错误,但有问题的逻辑可能出现在代码的前面。