2015-09-05 196 views
0

很多问题已被问及有关这个问题的答案,但没有任何答案帮助我。php加密和解密数字字符串与密钥

我要寻找一个PHP函数,将加密这样的小整数

123456到加密的字符串,只有A-Za-z0-9

所以输出会是什么样子a1b2c3d4

和我将能够使用像stringkey一个键就可以将其转换回123456


任何帮助吗?

+0

基本上可以使用每种加密算法,即PHP/mcrypt提供了适当的编码。输出尺寸是否有限制? –

+0

我不需要/希望它很长。最多8个字符。 – krummens

回答

1
$key = "encryption key"; 
$text="123456"; 
$encrypted = bin2hex(openssl_encrypt($text,'AES-128-CBC', $key)); 
$decrypted=openssl_decrypt(hex2bin($encrypted),'AES-128-CBC',$key); 
var_dump($encrypted,$decrypted); 

严格来说,虽然,这只会是AF和0-9,你能想出一个更好(更紧凑)的算法支持A-ZA-Z ...没有在我脑海中,现在想。 (建议任何人?)

+0

a-z工作正常。谢谢 – krummens

3

defuse/php-encryption即将推出的2.0.0版本将默认将其输出编码为十六进制字符。

<?php 
use Defuse\Crypto\Crypto; 

$key = Crypto::createNewRandomKey(); 

$encrypted = Crypto::encrypt('123456', $key); // hex encoded 
$raw_bytes = Crypto::encrypt('123456', $key, true); // raw binary 

注意化解的PHP库提供authenticated encryption,不只是简单的加密。你应该确定你明白the difference between encryption and authentication

我不需要/希望它很长。最多8个字符。

这听起来像一个错误,并且该错误有一个名称:hashids

如果您试图伪造一个行ID,则不想对其进行加密。相反,生成一个随机字符串并将其作为另一列存储在同一个表中。将数据列添加到数据库模式很便宜,随机生成它比从整数中确定性地生成更安全。

这就是我们为our audit reports所做的,不泄漏序列号。