有很多关于这个问题的问题和答案,但没有一个答案对我有所帮助。
我正在寻找一个PHP函数来加密像这样的小整数:
123456
加入仅包含A-Z
,a-z
和0-9
所以输出看起来像a1b2c3d4
。
我可以使用像stringkey
这样的密钥将其转换回123456
任何帮助?
答案 0 :(得分: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
请注意,Defuse的PHP库提供authenticated encryption,而不仅仅是纯加密。你应该确定你理解the difference between encryption and authentication。
我不需要/希望它很长。最多8个字符。
这听起来像是一个错误,而且这个错误有一个名字:hashids。
如果你想尝试obfsucate,比如行ID,你不想加密它。而是生成一个随机字符串并将其存储为同一个表中的另一列。在数据库模式中添加一个列很便宜,随机生成它比从一个整数确定性地导出它更安全。
这就是我们为our audit reports做的事情,不泄漏序列号。
答案 1 :(得分:2)
$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);
严格来说,这只是a-f和0-9,你可以想出一个支持a-zA-Z的更好(更紧凑)的算法......现在我想不出任何想法。 (有人建议吗?)