我的应用程序(显然)使用唯一的ID来区分记录.此UID在URL(例如./examplepage.php?UID=$example_int)等中传递.
虽然我明显有服务器端验证以确保客户端不访问其他客户端的数据,但是我可以在PHP中使用双向加密方法来仅传递加密的UID(例如./examplepage.php?EUID=$encrypted_int),以进一步减少机会有人在想"嘿,如果我增加这个整数怎么办?"
TIA.
esp*_*ley 97
PHP 5.3引入了一种非常易于使用的新加密方法:openssl_encrypt和openssl_decrypt.这里没有详细记录,所以这里有一个简单的例子:
$textToEncrypt = "My super secret information.";
$encryptionMethod = "AES-256-CBC"; // AES is used by the U.S. gov't to encrypt top secret documents.
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";
//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);
//To Decrypt
$decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash);
//Result
echo "Encrypted: $encryptedMessage <br>Decrypted: $decryptedMessage";
Run Code Online (Sandbox Code Playgroud)
我之所以选择256-AES,是因为它坚固而快速.它被美国政府采用来加密绝密文件.考虑到机器和软件,它很快.以下是可用加密方法的列表:
AES-128-CBC,AES-128-CFB,AES-128-CFB1,AES-128-CFB8,AES-128-ECB,AES-128-OFB,AES-192-CBC,AES-192-CFB,AES- 192-CFB1,AES-192-CFB8,AES-192-ECB,AES-192-OFB,AES-256-CBC,AES-256-CFB,AES-256-CFB1,AES-256-CFB8,AES-256- ECB,AES-256-OFB,BF-CBC,BF-CFB,BF-ECB,BF-OFB,CAMELLIA-128-CBC,CAMELLIA-128-CFB,CAMELLIA-128-CFB1,CAMELLIA-128-CFB8,CAMELLIA- 128-ECB,CAMELLIA-128-OFB,CAMELLIA-192-CBC,CAMELLIA-192-CFB,CAMELLIA-192-CFB1,CAMELLIA-192-CFB8,CAMELLIA-192-ECB,CAMELLIA-192-OFB,CAMELLIA-256- CBC,CAMELLIA-256-CFB,CAMELLIA-256-CFB1,CAMELLIA-256-CFB8,CAMELLIA-256-ECB,CAMELLIA-256-OFB,CAST5-CBC,CAST5-CFB,CAST5-ECB,CAST5-OFB,DES- CBC,DES-CFB,DES-CFB1,DES-CFB8,DES-ECB,DES-EDE,DES-EDE-CBC,DES-EDE-CFB,DES-EDE-OFB,DES-EDE3,DES-EDE3-CBC, DES-EDE3-CFB,DES-EDE3-CFB1,DES-EDE3-CFB8,DES-EDE3-OFB,DES-OFB,DESX-CBC,RC2-40-CBC,RC2-64-CBC,RC2-CBC,RC2- CFB,RC2-ECB,RC2-OFB,RC4,RC4-40,SEED-CBC,SEED-CFB,SEED-ECB,SEED-OFB,aes-128-cbc,aes-128-cfb,aes-128-cfb1, AES-1 28-cfb8,aes-128-ecb,aes-128-ofb,aes-192-cbc,aes-192-cfb,aes-192-cfb1,aes-192-cfb8,aes-192-ecb,aes-192- ofb,aes-256-cbc,aes-256-cfb,aes-256-cfb1,aes-256-cfb8,aes-256-ecb,aes-256-ofb,bf-cbc,bf-cfb,bf-ecb, bf-ofb,山茶花-128-cbc,山茶花-128-cfb,山茶花-128-cfb1,山茶花-128-cfb8,山茶花-128-ecb,山茶花-128-ofb,山茶花-192-cbc,山茶花-192- cfb,camellia-192-cfb1,camellia-192-cfb8,camellia-192-ecb,camellia-192-ofb,camellia-256-cbc,camellia-256-cfb,camellia-256-cfb1,camellia-256-cfb8, camellia-256-ecb,camellia-256-ofb,cast5-cbc,cast5-cfb,cast5-ecb,cast5-ofb,des-cbc,des-cfb,des-cfb1,des-cfb8,des-ecb,des- ede,des-ede-cbc,des-ede-cfb,des-ede-ofb,des-ede3,des-ede3-cbc,des-ede3-cfb,des-ede3-cfb1,des-ede3-cfb8,des- ede3-ofb,des-ofb,desx-cbc,rc2-40-cbc,rc2-64-cbc,rc2-cbc,rc2-cfb,rc2-ecb,rc2-ofb,rc4,rc4-40,seed-cbc,种子cfb,种子-ecb,种子-b
重要更新!!!
感谢Hobo和Jorwin在PHP 5.3.3中指出,有一个新参数可以使这个函数更安全一些.
Jorwin在他的评论中引用了这个链接,这是一个适用的摘录:
在5.3.3中他们添加了一个新参数,
string $iv(初始化向量)Real参数是:string openssl_encrypt ( string $data , string $method , string $password, bool $raw_output = false, string $iv )如果
$iv缺少,则发出警告:"使用空的初始化向量(iv)可能不安全,不推荐".如果
$iv太短,另一个警告:"IV传递只有3个字节长,密码期望一个精确的8字节的IV,填充\ 0"同样的IV应该用于
openssl_decrypt()
scr*_*gar -5
我认为,在 ID 旁边放置一个哈希值以确保其安全性,或者用额外的数据填充 ID,甚至将 ID 转换为十六进制,这些都可以很好地工作。