Symfony 2真的很新.我正在尝试实现secureRandom类和nextType(int)来生成一个32 char随机字符串.但是,该方法似乎返回非标准字符(UTF8).
码:
use Symfony\Component\Security\Core\Util\SecureRandom;
$generator = new SecureRandom();
$random = $generator->nextBytes(32);
...
Run Code Online (Sandbox Code Playgroud)
结果:
#ïŽ+cÐÁ-ˆ5FZ{CD:ïN2¨x…3ß,î2
Run Code Online (Sandbox Code Playgroud)
有没有办法指定我只想要标准的英文字符?先感谢您!
Cha*_*ase 17
通过源代码展望https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Util/SecureRandom.php 似乎在默认情况下此功能尝试使用OpenSSL的功能openssl_random_pseudo_bytes生成字节.因此,要获得此十六进制版本,您可以调用bin2hex.
use Symfony\Component\Security\Core\Util\SecureRandom;
$generator = new SecureRandom();
$random = $generator->nextBytes(32);
$humanReadableString = bin2hex($random);
Run Code Online (Sandbox Code Playgroud)
或保存变量赋值并将其翻译为1步:
$random = bin2hex($generator->nextBytes(32));
Run Code Online (Sandbox Code Playgroud)
每个字节由8位组成.AKA 0或1(二进制,基数2).
每4位可由1个十六进制值(基数16)表示.
因此,如果您要求1个字节(8个字符)说"11101001",那么将其转换为十六进制将为您提供"E9"(2个字符).
为了使用nextBytes获取随机的32个字符串,您需要将16字节的数据转换为十六进制值.
| 归档时间: |
|
| 查看次数: |
2574 次 |
| 最近记录: |