如何"争抢" (不是随机)图片中的所有像素?

时间:2015-09-23 03:28:45

标签: c# vb.net jpeg pixel pixels

什么是本质上扰乱图片中所有像素的最佳方法,从而扭曲它,使你无法再识别它描绘的内容,但不是随机的,所以如果你想,你可以解读像素和获得原始图片?我并不一定希望代码能够以相同的方式对每张图片进行加密,如果可能的话。我对它究竟是什么语言没有偏好,只要它不太荒谬而且有效。

我已经远距离搜索,无法找到实际以受控方式移动像素的任何内容......只需更改十六进制值等等......

任何帮助?

3 个答案:

答案 0 :(得分:1)

因此,您的想法是通过移动图片中的像素来加扰图片,您需要更多变体,并且最重要的是您希望它进行解扰。 嗯,这非常具有挑战性,

除非你作弊:决定性的混乱!

确定性混乱是建立在这个概念之上的,简单的可逆操作可以在许多运行混乱之后描述。

您可以定义一组可逆操作。

例如,

swap_horizontal_lines(h_line_a, h_line_b);
swap_vertical_lines(v_line_a, v_line_c);
another could be rotate_pixel_RGB(x,y);

RGB => GBR => BRG => RGB 因此,通过三次应用操作,您将恢复原始值。

依旧...... 例如,您可以以字节形式访问图片,并交换其字节。

因此,如果你只是按照某种顺序应用这些操作,你就可以对图像进行加扰,即使它的母CMOS传感器也不会认识到它是它的孩子:)。 通过向后应用订单,您可以重新获得图片。 在rgb旋转时要小心,它需要3次才能反转。

scrambling_runs => descramlbing_runs

0 => 0 or 3,
1 => 2
2 => 1
3 => 0 or 3

答案 1 :(得分:1)

对不起,不要吝啬挖掘死线,但我想我可能会找到你正在寻找的答案。

我刚刚创建了我的第一款Android应用,它就是这样做的。如果您想查看here

我的想法是使用密码将每个像素移动到不同的(随机可能的)点,但仍然可以撤消每次移动以使用密码恢复相同的图像。如果您有一个1000 x 1000的图像并且您独立移​​动每个像素,这可能需要很长时间才能完成1,000,000次操作,因此程序会相互独立地移动每一行和每列,从而将其转移到约2000次行动。

但如果你"重新排列"每一行和每一列,你得到一个看起来不完全随机的怪异图案,所以这个过程的下一步是倾斜图像并再次对行和列进行加扰。

使用此方法,您还可以对行和列进行分组以获得"块"加扰

一切都是可逆的,如果你向后做以获得原版,但有几点需要注意:你必须使用无损图像格式,否则它会混淆一切(PNG,BMP等) ,如果你修改"扰乱"图像(调整大小,旋转,裁剪,倾斜)即使是1行/列,也无法解读它

Here's the complete process

获取"键"从密码是困难的部分,我可以发布一些代码,如果你愿意的话,它可以在Java中发布。

答案 2 :(得分:0)

我不确定你为什么要"搬家"像素。每个像素都由十六进制值表示,所以如果你"移动"像素1到不同的位置,然后位置1的十六进制值将更改为您替换它的像素的值。如此有效,你所做的只是改变位置1的十六进制值。你并没有真正地移动"任何东西。那么为什么不呢,只需创建一个算法来以预定的方式更改十六进制值,您就可以解密。