C++ 基于256位密钥对矩阵进行加扰的方法有哪些?

C++ 基于256位密钥对矩阵进行加扰的方法有哪些?,c++,matrix,encryption,encoding,obfuscation,C++,Matrix,Encryption,Encoding,Obfuscation,希望构建一种基于256位密钥对矩阵进行置乱的算法。给定两个m*n矩阵A和B以及密钥K,我希望A和B以相同的方式被置乱。非正式地说,如果A==B,加扰(A,K)==scramble(B,K) 我试图做的似乎与加密有相似之处,但我对这个领域完全不熟悉。我觉得必须有一些东西我可以利用加密算法,使过程快速和计算效率 为了澄清,置乱的主要目的是混淆矩阵内容,同时仍允许进行比较。听起来您可能需要。将矩阵/图像馈送到其中会为其生成(几乎)唯一的哈希值。这个散列值很方便,因为它的大小是恒定的,并且通常比源数据小

希望构建一种基于256位密钥对矩阵进行置乱的算法。给定两个m*n矩阵A和B以及密钥K,我希望A和B以相同的方式被置乱。非正式地说,如果A==B,加扰(A,K)==scramble(B,K)

我试图做的似乎与加密有相似之处,但我对这个领域完全不熟悉。我觉得必须有一些东西我可以利用加密算法,使过程快速和计算效率


为了澄清,置乱的主要目的是混淆矩阵内容,同时仍允许进行比较。

听起来您可能需要。将矩阵/图像馈送到其中会为其生成(几乎)唯一的哈希值。这个散列值很方便,因为它的大小是恒定的,并且通常比源数据小得多。实际上,从散列值返回原始数据是不可能的,再次对相同的图像数据进行散列会产生相同的散列值

如果您想在其中添加一个密钥,可以将图像数据和密钥连接起来,并对其计算哈希。使用相同的数据和密钥,您将收到相同的哈希值,如果更改其中一个,哈希值也将更改


(几乎是独一无二的:根据鸽子洞原理,将一个较大的输入转换为较小的散列值,必须有多个输入生成相同的散列值。实际上,这很少引起关注)

听起来您可能需要。将矩阵/图像馈送到其中会为其生成(几乎)唯一的哈希值。这个散列值很方便,因为它的大小是恒定的,并且通常比源数据小得多。实际上,从散列值返回原始数据是不可能的,再次对相同的图像数据进行散列会产生相同的散列值

如果您想在其中添加一个密钥,可以将图像数据和密钥连接起来,并对其计算哈希。使用相同的数据和密钥,您将收到相同的哈希值,如果更改其中一个,哈希值也将更改


(几乎是独一无二的:根据鸽子洞原理,将一个较大的输入转换为较小的散列值,必须有多个输入生成相同的散列值。实际上,这很少是一个问题)

你能更具体地说明你需要它做什么吗?当前
int-scramble(矩阵A,键K){return 1;}
fullfill满足您的要求;)你可以从这开始。将矩阵表示为1d数组并用256位密钥加密。你如何定义“置乱”?那会改变顺序吗?还是让他们无法阅读?它必须是可逆的吗?它必须抵制在没有密钥的情况下解扰的尝试吗?你是在寻找AES 256之类的加密还是某种盐渍哈希?这两种方法都可以应用于序列化数据。能否更具体地说明需要它做什么?当前
int-scramble(矩阵A,键K){return 1;}
fullfill满足您的要求;)你可以从这开始。将矩阵表示为1d数组并用256位密钥加密。你如何定义“置乱”?那会改变顺序吗?还是让他们无法阅读?它必须是可逆的吗?它必须抵制在没有密钥的情况下解扰的尝试吗?你是在寻找AES 256之类的加密还是某种盐渍哈希?这两种方法都可以应用于序列化数据。带有键的哈希算法更准确地称为。如果你想要这个MAC的加密强度,那么你应该使用一个已建立的MAC,例如,而不是像你建议的那样一个特殊的构造。非常好的一点@JamesKPolk-谢谢。我太专注于这看起来有多像是散列的、盐渍的密码,以至于我完全忽略了Mac电脑的存在。这完全行不通。输出需要保持一个矩阵,所以我仍然可以通过计算点积来计算置乱(a)和置乱(B)之间的相似性。我想你也希望点B等于(或接近)置乱(a)点置乱(B)。为此,你确实需要一些不同的东西。我认为使用键来洗牌数组中的元素是可行的,但这并不能很好地隐藏矩阵内容。带有键的哈希算法更准确地称为。如果你想要这个MAC的加密强度,那么你应该使用一个已建立的MAC,例如,而不是像你建议的那样一个特殊的构造。非常好的一点@JamesKPolk-谢谢。我太专注于这看起来有多像是散列的、盐渍的密码,以至于我完全忽略了Mac电脑的存在。这完全行不通。输出需要保持一个矩阵,所以我仍然可以通过计算点积来计算置乱(a)和置乱(B)之间的相似性。我想你也希望点B等于(或接近)置乱(a)点置乱(B)。为此,你确实需要一些不同的东西。我认为使用该键来洗牌数组中的元素会起作用,但这并不能很好地隐藏矩阵内容。