有没有办法将字符串转换为二进制,然后再返回标准PHP库?
澄清我正在尝试做的是在数据库上存储密码.我将首先使用哈希函数转换它,然后最终将其存储为二进制.
我发现最好的方法是使用这个功能.似乎同时散列并以二进制输出.
Fra*_*nes 54
你想用pack和base_convert.
// Convert a string into binary
// Should output: 0101001101110100011000010110001101101011
$value = unpack('H*', "Stack");
echo base_convert($value[1], 16, 2);
// Convert binary into a string
// Should output: Stack
echo pack('H*', base_convert('0101001101110100011000010110001101101011', 2, 16));
Run Code Online (Sandbox Code Playgroud)
Ste*_*roz 31
是的,当然!
那里...
$bin = decbin(ord($char));
Run Code Online (Sandbox Code Playgroud)
......又回来了.
$char = chr(bindec($bin));
Run Code Online (Sandbox Code Playgroud)
字符串只是一个字节序列,因此它实际上是PHP中的二进制数据.你究竟想做什么?
编辑
如果要在数据库中存储二进制数据,最常出现的问题是数据库中的列定义.PHP不区分二进制数据和字符串,但数据库确实如此.比如在MySQL中,你应该存储在二进制数据BINARY,VARBINARY或BLOB列.
另一个选项是base64_encode您的PHP字符串并将其存储在数据库的某些VARCHAR或TEXT列中.但请注意,使用时字符串的长度会增加base64_encode.
您的散列已经是二进制的,可以与您的数据库一起使用。
但是,您必须需要将其转换为数据库列定义期望的格式。
PHP 中的任何字符串(直到 5.3)都是二进制字符串。这意味着它只包含二进制数据。
但是,由于向后兼容 PHP 6,您已经可以将字符串显式转换为二进制:
$string = 'my binary string';
$binary = b'my binary string';
Run Code Online (Sandbox Code Playgroud)
但这仅仅是出于兼容性原因,在您的代码中,您可以这样做:
$string = $binary; // "convert" binary string into string
$binary = $string // "convert" string into binary string
Run Code Online (Sandbox Code Playgroud)
因为它是一样的。“转换”是多余的。
我发现的最简单的方法是转换为十六进制而不是字符串。如果它对你有用:
$hex = bin2hex($bin); // It will convert a binary data to its hex representation
$bin = pack("H*" , $hex); // It will convert a hex to binary
Run Code Online (Sandbox Code Playgroud)
或者
$bin = hex2bin($hex); // Available only on PHP 5.4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
135456 次 |
| 最近记录: |