我目前有一个PHP应用程序,它使用静态数据加密将敏感信息存储到数据库中,我稍后可以解密该数据库以在我的应用程序中使用。
这是我正在使用的当前代码。我知道…我知道…它一点都不安全,但它对我使用它的目的来说很好。我没有存储信用卡号码、社会保险号码或类似的东西。主要是姓名和地址。
define('CRYPTO_KEY', 'some-key');
function decrypt($val){
$val = urlencode($val);
$data = base64_decode(urldecode($val));
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$val = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', CRYPTO_KEY, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
MCRYPT_MODE_CBC,
$iv
),
"\0"
);
return $val;
}
function enc($val){
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_DEV_URANDOM
);
$val = urlencode(base64_encode(
$iv .
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', CRYPTO_KEY, true),
$selection,
MCRYPT_MODE_CBC,
$iv
)
));
return $val;
}
我遇到的问题是我刚刚从PHP 5.5升级到PHP 7.1。现在在PHP 7.1中,我的加密/解密函数抛出大量警告,指出以下函数已弃用:
我做了一些研究,发现新的建议是使用libNa或OpenSSL等库,这里有。
我研究了这两个问题,但文档太过技术性,我无法理解。我甚至不知道如何安装libsodium,更不用说使用它了。
我的问题是,有没有人愿意分享与PHP 7.1或更高版本兼容的优秀加密/解密功能?
更好的是,有人愿意提供有关如何使用libNa或OpenSSL进行数据加密/解密的说明吗?
仅供参考-我目前正在使用与cPanle共享的托管平台。我已经安装了composer,并了解如何通过它安装软件包。我从未使用过PECL或PEAR
这是一种使用开放 SSL 加密 Php 7 的方法。这是加密和解密数据的可靠方法。唯一要记住的是,在数据库中搜索某些参数时,您需要在搜索开始之前解密。首先,您从钥匙开始。然后有一个加密功能以及一个解密功能。
密钥您可以更改为任何您想要的。将其存储在您的服务器或其他服务器上。
$key = 'qkwjdiw239&&jdafweihbrhnan&^%$ggdnawhd4njshjwuuO';
接下来是加密php函数。
function encryptthis($data, $key) {
$encryption_key = base64_decode($key);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0,
$iv);
return base64_encode($encrypted . '::' . $iv);
}
然后使用该函数进行解密。
function decryptthis($data, $key) {
$encryption_key = base64_decode($key);
list($encrypted_data, $iv) = array_pad(explode('::', base64_decode($data),
2),2,null);
return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0,
$iv);
}
要查看表单工作示例的代码,请参阅此网页。https://a1websitepro.com/data-encryption-php-mysql-methods-implementation-open-ssl-encrypt/
这是一个有点老的问题,但我想我还是要回答一下。
从 PHP 7.2 开始,库钠已作为核心模块启用。您无需安装任何其他内容,它将“正常工作”。
对于PHP 7.1,我建议使用LibNa的Pecl扩展。您可以像安装任何其他Pecl扩展一样安装它:
pecl安装libnadium
无论如何,我强烈建议使用sodium_compat
库作为LibNa的包装器。从5.2开始,它就与PHP兼容,如果缺少Pecl模块,它甚至还附带了一个PHP原生的LibNa实现。
注意:PHP原生实现比编译后的扩展要慢得多,但是如果您在升级到7.2或安装Pecl模块时遇到问题,它至少可以帮助您入门。
对于现有代码,请考虑以下作为升级以使用sodium_compat
:
define('CRYPTO_KEY', 'some-key');
function decrypt($val){
$key = base64_decode(CRYPTO_KEY);
$data = base64_decode(urldecode($val));
$nonce = substr($data, 0, ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = substr($data, ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES);
$plaintext = ParagonIE_Sodium_Compat::crypto_secretbox_open($ciphertext, $nonce, $key);
if ($plaintext === false) {
throw new Exception("Bad ciphertext");
}
return $plaintext;
}
function enc($val){
$key = base64_decode(CRYPTO_KEY);
$nonce = random_bytes(ParagonIE_Sodium_Compat::CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = ParagonIE_Sodium_Compat::crypto_secretbox($val, $nonce, $key);
return urlencode(base64_encode($nonce . $ciphertext));
}
额外的< code > ParagonIE _ Sodium _ Compat::命名空间是在您使用< code>sodium_compat的情况下。如果你能升级到PHP 7.2,你可以直接使用本地方法和常量。它们的名字都很相似,所以我不会在这里赘述。
注意:正如其他人在评论中提到的,将您的密钥硬编码存储在执行加密的代码旁边不是一个好主意。我在这里复制它是为了说明您的代码将如何更改为使用LibNa,而不是作为对CRYPTO_KEY
定义方式的认可。
问题内容: 按照此答案中的建议,我的应用程序当前使用构造函数将数据传递到表单类型。但是,Symfony2.8升级指南建议不要将类型实例传递给函数: 将类型实例传递给Form :: add(),FormBuilder :: add()和FormFactory :: create *()方法已过时,在Symfony 3.0中不再受支持。而是传递类型的标准类名。 看来我无法使用完全合格的类名传递数据,还
前面小节介绍了如何存储密码,但是有的时候,我们想把一些敏感数据加密后存储起来,在将来的某个时候,随需将它们解密出来,此时我们应该在选用对称加密算法来满足我们的需求。 base64加解密 如果Web应用足够简单,数据的安全性没有那么严格的要求,那么可以采用一种比较简单的加解密方法是base64,这种方式实现起来比较简单,Go语言的base64包已经很好的支持了这个,请看下面的例子: package
问题内容: 网页中Java Applets的一个众所周知的问题是,浏览器会忽略applet标记的z-index而不是页面中的其他组件。无论您如何在页面中定位元素和z- index元素,小程序都将在所有内容之上吸引自己。 有一种解决方法,称为iframe垫片,如此处所述:http : //www.oratransplant.nl/2007/10/26/using-iframe-shim-to-par
问题内容: 我们正在使用bcrypt来存储不需要解密的密码和数据。 应该采取什么措施来保护其他这样做的用户信息。对于此示例,假设我们不希望用户的真实姓名采用纯文本格式,以防有人获取数据库。 这是一些敏感数据,但还需要不时调用并以纯文本显示。有没有简单的方法可以做到这一点? 问题答案: 您可以使用crypto模块: 编辑 现在 createCipher 和 createDecipher 已被弃用,而
本文向大家介绍PHP对称加密函数实现数据的加密解密,包括了PHP对称加密函数实现数据的加密解密的使用技巧和注意事项,需要的朋友参考一下 项目中有一个地方用到了将用户ID加密、传至下个接点进行反解的需求。(原谅我不能透漏太多-_-!),第一个想到的就是康盛Ucenter中的一个函数,后来搜了下,在简明魔法中也找到了个简单的方法,遂整合了下,形成了自己使用的函数。 一、对称加密 发送方将明文使用密钥和
我目前正在为培训应用程序实现AudioHelper,该应用程序可以在培训期间运行一些激励性演讲。因此,基本上,如果一个演讲正在运行,我想避开我的spotify音频,以便清楚地听到演讲。对于Kitkat和Oreo(及更高版本),我已经解决了这个问题(参见代码)。但对于Lollipop,我找不到正确的实现。在 developer.android.com,他们写道: 对于以Android 5.0(API