php使用密钥加密和解密数字字符串

时间:2015-09-05 22:06:55

标签: php encryption

有很多关于这个问题的问题和答案,但没有一个答案对我有所帮助。

我正在寻找一个PHP函数来加密像这样的小整数:

123456加入仅包含A-Za-z0-9

的加密字符串

所以输出看起来像a1b2c3d4

我可以使用像stringkey这样的密钥将其转换回123456

任何帮助?

2 个答案:

答案 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的更好(更紧凑)的算法......现在我想不出任何想法。 (有人建议吗?)