【问题标题】:Accessing random lsb bit in steganography在隐写术中访问随机 lsb 位
【发布时间】:2018-07-29 16:27:36
【问题描述】:

我正在尝试进行音频隐写术。在将数据隐藏在音频中之前,我使用 aes 对数据进行加密,然后在 lsb 处以连续字节的形式嵌入位。恢复和aes解密工作正常。

但是如果我为 lsb 尝试随机位,它会给我以下错误:

-->线程“main”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);

【问题讨论】:

  • 您确定提取所有嵌入的正确字节吗?您只向我们展示了 3 行代码,这可能是引发错误的地方,但有问题的逻辑可能在您的代码中更早。

标签: java aes steganography


【解决方案1】:
  1. 请参阅 PKCS padding,注意 PKCS#5 是 PKCS#7 WRT AES 的误称,因为 AES 实现开发人员懒得包含正确的选项名称。

  2. 因为 PKCS#7 填充具有格式要求,并且在 256^16 个可能的字节序列中形成正确填充的字节序列(~ 1^16 + 2^16 + ... + 15^16)很少随机字节形成有效 PKCS#7 填充的机会非常小。

  3. 使用不需要填充的 CTR 模式可能会更好,每次加密只需一个唯一的密钥/计数器对。

【讨论】:

    猜你喜欢
    • 2013-08-18
    • 2016-05-25
    • 2018-08-01
    • 1970-01-01
    • 2016-08-18
    • 2012-11-19
    • 2018-10-03
    • 2018-10-02
    相关资源
    最近更新 更多