如何在 PHP 中加密 XOR 十六进制字符串 32

How to encrypt XOR hex string 32 in PHP

我正在尝试使用 XOR 加密算法来加密我的一些密码。我在 Cyber​​Chef 上测试了它,但我不知道如何从 PHP 转换它。我期待着帮助。非常感谢。 XOR HEX string 32

这有助于从涉及的基本数据结构入手。

你的objective是用一个秘密的key把你的纯文本 -- 您希望保密的消息 -- 进入 加密文本 。根据定义,您的纯文本很容易让对手理解,而您的加密文本则不然。

那么,你剩下的objective就是用密钥把密文变回明文。 XOR 是一种对称密码:它使用完全相同的密钥来加密和解密。

基本数据结构

您有 文本字符串 例如 ATTACK

你有数组喜欢

array( 65, 84, 84, 65, 67, 75)

你有 base 64 encoded 个字符串,例如

base64_encode( "ATTACK" ); //QVRUQUNL

你的数据结构

假设您的信息是攻击。 (当然,这种加密货币是从军事应用开始的。)那是一组数字。 Your php example converts your message into an array of ASCII character values. This little bit of code does that. It uses the ord() 将字母转换为数字的函数,称为代码点。 运行它。

$plaintext = 'ATTACK';
$plaintextASCII = [];
foreach( str_split( $plaintext ) as $letter) {
  $plaintextAscii[] = ord( $letter );
}
print_r( $plaintextAscii );

它与您示例中的这行代码执行相同的操作,但使用显式循环而不是 array_map() 快捷方式。

return array_map('ord', str_split($text));

然后您可以破坏该字符值数组。 XOR 密码是一种方法。

最后使用 chr() 函数将其转换回字符串。

$encryptedString = '';
foreach ( $plaintextAscii as $codepoint ) {
  $encryptedString .= chr( $codepoint );
}

但是,由于您破坏了代码点以对其进行加密,因此此 $encryptedString 包含 non-printable 个字符。所以你不能只是将字符串粘贴到电子邮件或类似的东西中。相反,您必须仅使用可打印字符对字符串进行编码。

base64_encode( $encryptedString );

这是加密信息。要解密它,您需要反转过程。

这应该能让您开始理解这个示例代码。

专业提示 在尝试理解算法时,不要尝试使用 open-source 包。相反,请查看他们的代码并将有趣的行复制到您自己的示例代码中。

专业提示 获得一个不错的调试程序,这样您就可以单步执行代码。

在线安全提示 不要,不要重复,使用这种加密方式在线存储人们的密码。它不够安全,无法减慢 cybercreeps 的速度。 php 有一组非常好的 password-hashing 函数。 Read about them here.