2015-09-05 194 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所做的,不泄漏序列號。