到目前为止,我已经在十六进制编辑器中打开了图像并查看了字节。但是,对于我的生活,我无法识别声音。我为此花了几天时间。我什至尝试在 Audacity 中打开文件(作为“原始数据”)并播放它。无非是“噪音”。试图创建直方图/频率分析,但没有。
任何帮助,将不胜感激。
到目前为止,我已经在十六进制编辑器中打开了图像并查看了字节。但是,对于我的生活,我无法识别声音。我为此花了几天时间。我什至尝试在 Audacity 中打开文件(作为“原始数据”)并播放它。无非是“噪音”。试图创建直方图/频率分析,但没有。
任何帮助,将不胜感激。
隐写术通常通过将第二张图像或一些数据隐藏在另一张图像的低位中来工作。这些值总体上变得非常微不足道,并且对图像的视觉外观几乎没有影响。
要显示第二个数据,您需要屏蔽最高位,然后通常按比例放大剩余值。
但是,您需要提前知道:
等等
没有这些信息,它就毫无用处(你可以尝试可能的猜测,但它们将是猜测,你可以这样做很长时间)。
无论如何,我在下面提供了一个显示该过程的基础,但是如果不知道原始数据是如何组织的,那么剩下的内容以及是否正确提取几乎是“不可能”确定的:
这是使用预先知道的图像在低 2 位中隐藏另一个图像(猫)的过程的结果:
var img = new Image;
img.onload = unstegano;
img.crossOrigin = "";
img.src = "//i.imgur.com/DkCZMJN.png"; // contains a hidden image
document.body.appendChild(img);
function unstegano() {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
ctx.drawImage(this, 0, 0);
// get pixels
var idata = ctx.getImageData(0, 0, canvas.width, canvas.height),
data = idata.data, i = 0, len = data.length;
while(i < len) {
data[i] = (data[i++] & 3)<<6; // masks two first bits, shifts it to scale it
data[i] = (data[i++] & 3)<<6;
data[i] = (data[i++] & 3)<<6;
i++
}
ctx.putImageData(idata, 0 ,0);
document.body.appendChild(canvas);
}
使用提供的图像,您会得到看起来像噪音的东西,但这并不重要,因为音频数据在任何情况下都会产生噪音图像 - 您现在的挑战是利用这种噪音(或“噪音”)制作任何东西:
var img = new Image;
img.onload = unstegano;
img.crossOrigin = "";
img.src = "//i.imgur.com/IpaDzB4.png";
document.body.appendChild(img);
function unstegano() {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
canvas.width = this.naturalWidth;
canvas.height = this.naturalHeight;
ctx.drawImage(this, 0, 0);
// get pixels
var idata = ctx.getImageData(0, 0, canvas.width, canvas.height),
data = idata.data, i = 0, len = data.length;
while(i < len) {
data[i] = (data[i++] & 1)<<7; // masks first bit, shifts it to scale it
data[i] = (data[i++] & 1)<<7;
data[i] = (data[i++] & 1)<<7;
i++
}
ctx.putImageData(idata, 0 ,0);
document.body.appendChild(canvas);
}