Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何";“扰码”;(不是随机)图片中的所有像素?_C#_Vb.net_Jpeg_Pixel_Pixels - Fatal编程技术网

C# 如何";“扰码”;(不是随机)图片中的所有像素?

C# 如何";“扰码”;(不是随机)图片中的所有像素?,c#,vb.net,jpeg,pixel,pixels,C#,Vb.net,Jpeg,Pixel,Pixels,从本质上讲,对图片中的所有像素进行置乱,从而使其失真,从而使您无法再识别它所描绘的内容(无论是随机还是随机),从而如果您愿意,您可以解读像素并获得原始图片,这是最好的方法吗?如果可能的话,我不一定希望代码以相同的方式对每张图片进行置乱。我不喜欢它到底是什么语言,只要它不太可笑,而且有效 我已经搜索了很多地方,但没有找到任何关于以可控方式移动像素的信息。。。只是更改十六进制值等等 有什么帮助吗 因此,您的想法是通过移动图片中的像素来对图片进行置乱,您需要更多的变体,除此之外,您还需要对其进行解扰。

从本质上讲,对图片中的所有像素进行置乱,从而使其失真,从而使您无法再识别它所描绘的内容(无论是随机还是随机),从而如果您愿意,您可以解读像素并获得原始图片,这是最好的方法吗?如果可能的话,我不一定希望代码以相同的方式对每张图片进行置乱。我不喜欢它到底是什么语言,只要它不太可笑,而且有效

我已经搜索了很多地方,但没有找到任何关于以可控方式移动像素的信息。。。只是更改十六进制值等等


有什么帮助吗

因此,您的想法是通过移动图片中的像素来对图片进行置乱,您需要更多的变体,除此之外,您还需要对其进行解扰。 嗯,这很有挑战性

除非你作弊:确定性混乱

确定性混沌是建立在一个概念上的,即简单的可逆操作可以描述多次运行后的混沌

您可以定义一组可逆操作

比如说,

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次运行才能反转

加扰\u运行=>解扰\u运行

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

我不知道你为什么要“移动”像素。每个像素都由十六进制值表示,因此如果将像素1“移动”到不同的位置,则位置1的十六进制值将更改为替换它的像素的值。因此,实际上,您所做的只是更改位置1的十六进制值。你没有真正“移动”任何东西。那么为什么不呢,只要创建一个算法,以预先确定的方式更改十六进制值,您就可以破译它

对不起,我不是想挖出一条死线,但我想我可能有一个答案来回答你的问题

我刚刚制作了我的第一个Android应用程序,它就是这样做的。如果你想看看的话

我的想法是使用密码将每个像素移动到不同(尽可能随机)的位置,但仍然能够撤消每个移动以使用密码恢复相同的图像。如果您有一个1000 x 1000的图像,并且您独立地移动每个像素,这意味着1000000次操作,这可能需要很长时间,因此相反,程序会独立地移动每一行和每一列,这将使其减少到大约2000次操作

但是,如果你“重新排列”每一行和每一列,你会得到一个看起来很奇怪的模式,它不是完全随机的,所以这个过程的下一步是倾斜图像,并再次扰乱行和列

使用此方法,您还可以将行和列分组以获得“块”加扰

如果你向后做以获得原始图像,那么一切都是可逆的,但是有几件事需要注意:你必须使用无损耗的图像格式,否则它会把一切都弄糟(PNG、BMP等),如果你修改“混乱”的图像(调整大小、旋转、裁剪、倾斜),即使是每列修改一行,你也无法解读它


从密码中获取“密钥”是最困难的部分,如果您愿意,我可以发布一些代码,不过它是用Java编写的。

使用加密/解密,将图像视为
字节[]
。所谓的置乱,是指像素顺序的置乱吗?如果你随机洗牌,但记住了随机种子,你应该能够再次“取消填充”。记住,你不能使用JPEG或任何其他有损格式。一旦保存,一些像素将被更改,解读将产生原始图像的可识别残骸或全部随机噪声。PNG应该是最好的betI,只是尝试了纯“移动像素”,结果令人失望。在屏幕截图和高分辨率照片上,您可以猜测图像的类型(屏幕截图、绿色图片等)。按照@Enigmativity的建议使用加密。如果你不想猜测图像的类型,你可能想按照@Enigmativity的建议。在一张绿色区域的照片上移动像素仍然会给你留下一张大致呈绿色的图像。