将字符串转换为二进制,然后再使用PHP返回

loc*_*boy 50 php binary

有没有办法将字符串转换为二进制,然后再返回标准PHP库?

澄清我正在尝试做的是在数据库上存储密码.我将首先使用哈希函数转换它,然后最终将其存储为二进制.


我发现最好的方法是使用这个功能.似乎同时散列并以二进制输出.

http://php.net/manual/en/function.hash-hmac.php

Fra*_*nes 54

你想用packbase_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)

  • 你是完全正确的!它缺少领先的0,对不起. (2认同)
  • 更糟糕的是,strlen(base_convert($ value [1],16,2))== 39! (2认同)
  • 我尝试使用您的代码将此001106130720160454转换为二进制文件.它只给我零 (2认同)

Ste*_*roz 31

是的,当然!

那里...

$bin = decbin(ord($char));
Run Code Online (Sandbox Code Playgroud)

......又回来了.

$char = chr(bindec($bin));
Run Code Online (Sandbox Code Playgroud)

  • 对于字符串连接,可能添加一个`str_pad(...,8,0,STR_PAD_LEFT)`:) (3认同)
  • @Yoshi 感谢您完成我的回答... @cfarm54 当然,我所说的只是针对一个角色! (2认同)

Ste*_*rig 9

字符串只是一个字节序列,因此它实际上是PHP中的二进制数据.你究竟想做什么?

编辑

如果要在数据库中存储二进制数据,最常出现的问题是数据库中的列定义.PHP不区分二进制数据和字符串,但数据库确实如此.比如在MySQL中,你应该存储在二进制数据BINARY,VARBINARYBLOB列.

另一个选项是base64_encode您的PHP字符串并将其存储在数据库的某些VARCHARTEXT列中.但请注意,使用时字符串的长度会增加base64_encode.


hak*_*kre 6

您的散列已经是二进制的,可以与您的数据库一起使用。

但是,您必须需要将其转换为数据库列定义期望的格式。

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)

因为它是一样的。“转换”是多余的。


Reg*_*ura 5

我发现的最简单的方法是转换为十六进制而不是字符串。如果它对你有用:

$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)