Php 生成可直接在URL中使用的加密字符串
有时在我的表单中,我发现我自己在使用隐藏的输入,其中包含一些客户不需要知道的值。(实际上,即使他知道这不是一个大问题,但我不喜欢那样……这样我就不需要非常安全和复杂的加密工具了)Php 生成可直接在URL中使用的加密字符串,php,encryption,Php,Encryption,有时在我的表单中,我发现我自己在使用隐藏的输入,其中包含一些客户不需要知道的值。(实际上,即使他知道这不是一个大问题,但我不喜欢那样……这样我就不需要非常安全和复杂的加密工具了) 基于这里的一些答案(),我构建了下一个类 class Crypto { const ENCRYPT_METHODE = "AES-256-CBC"; const SECRET_HASH = "25c6c7ff35b9979b151f2136cd13b0ff"; private sta
基于这里的一些答案(),我构建了下一个类
class Crypto
{
const ENCRYPT_METHODE = "AES-256-CBC";
const SECRET_HASH = "25c6c7ff35b9979b151f2136cd13b0ff";
private static function GetIV()
{
if (empty($_SESSION['crypto']['iv'])) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$_SESSION['crypto']['iv'] = mcrypt_create_iv($iv_size, MCRYPT_RAND);
}
return $_SESSION['crypto']['iv'];
}
public static function Encrypt($value)
{
return openssl_encrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
public static function Decrypt($value)
{
return openssl_decrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
}
。。。到目前为止,Crypto
对隐藏输入很有效,但有时它会生成需要编码的字符串,然后再将其放入url那么,如何改进这门课以满足我的需要呢?
或者还有其他更好的加密解密字符串的方法吗
编辑
与其尝试生成有效的URL字符串值(直接使用
openssl\u decrypt
),不如将urlencode
/urldecode
添加到方法中就可以了,这就是加密方法的工作原理:
class Crypto{
// ...
public static function Encrypt($value){
$encrypted = openssl_encrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
return urlencode($encrypted);
}
public static function Decrypt($value){
$value = urldecode($value);
return openssl_decrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
}
我认为它在任何地方都可以正常工作,多亏了您可以使用
url\u encode()
确保每个字符都可以传递到url,并urldecode()
获取字符 您可以使用url\u encode()
确保每个字符都可以传递到url,并使用urldecode()
获取字符 你能告诉我们你是如何把这些值放到URL的吗?@thebluefox就是这样!!我试图了解您是如何在HTML中使用类中的方法的。我知道URL是什么样子。如果您只是想对不太了解的“通用”用户隐藏该值,只需使用base64\u encode()
。如果你需要更强大的加密,你是在一个非常好的方式。注意不推荐使用的函数和过时的openssl版本。在尝试有关加密/openssl的教程时,请从2016/2017年开始查找,较旧的东西可能会使用不好的做法。来自德国的Dan感谢,base64_encode
它看起来足以满足我的需要,我找到了另一种方法使其适用于URL:您能告诉我们如何将这些值放入URL吗?@thebluefox就是这样!!我试图了解您是如何在HTML中使用类中的方法的。我知道URL是什么样子。如果您只是想对不太了解的“通用”用户隐藏该值,只需使用base64\u encode()
。如果你需要更强大的加密,你是在一个非常好的方式。注意不推荐使用的函数和过时的openssl版本。在尝试有关加密/openssl的教程时,从2016/2017年开始查找,旧的东西可能会使用不好的做法。Danfrom Germany感谢,base64_encode
它看起来足以满足我的需要,我找到了另一种方法使其适用于URL:我使用的东西知道,但这会影响加密值,所以它不会被正确加密?你知道其他加密/解密字符串的简单方法吗?对于URL?不,一根绳子?我还没有搜索。完美:)然后您可以验证此答案并将主题标记为已解决;)我使用的是知道的,但这会影响加密值,因此不会正确加密?您知道加密/解密字符串的其他简单方法吗?对于URL?不,一根绳子?我还没有搜索。完美:)然后您可以验证此答案并将主题标记为已解决;)