可能重复:
PHP双向加密:我需要存储可以检索的密码
我计划在我的网站上为我的用户存储外国帐户信息,也就是用户名和密码等等...我想保证信息的安全,但我知道如果我散列他们的信息,我无法检索它以供以后使用.
Base64是可解密的,所以没有必要使用它只是简单的关闭.我的想法是加扰用户并在它解密之前和之后通过这种方式传递,如果你尝试解密,你会得到一些看起来很有趣的文本.是否有一个php函数接受将进行字符串的唯一加扰的值,并在以后重新计算该值时对其进行解扰?
有什么建议?
这并不能正常工作:
$jsonDecode = json_decode($jsonData, TRUE);
Run Code Online (Sandbox Code Playgroud)
但是,如果我复制字符串$jsonData并将其手动放入解码函数中,它确实有效.
这有效:
$jsonDecode = json_decode('{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}', TRUE);
Run Code Online (Sandbox Code Playgroud)
我输出$jsonData复制它并在解码函数中输入如上所述.然后它奏效了.但是,如果我$jsonData直接放入解码功能,它不会.
var_dump($jsonData) 说明:
string(144) "{"id":"0","bid":"918","url":"http:\/\/www.google.com","md5":"6361fbfbee69f444c394f3d2fa062f79","time":"2014-06-02 14:20:21"}"
Run Code Online (Sandbox Code Playgroud)
在$jsonData来自一个加密$_GET变量.要加密它我用这个:
$key = "SOME KEY";
$iv_size = mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$enc = mcrypt_encrypt(MCRYPT_BLOWFISH, $key, $data, MCRYPT_MODE_ECB, $iv);
$iv = rawurlencode(base64_encode($iv));
$enc = rawurlencode(base64_encode($enc));
//To Decrypt
$iv = base64_decode(rawurldecode($_GET['i']));
$enc = base64_decode(rawurldecode($_GET['e']));
$data = mcrypt_decrypt(MCRYPT_BLOWFISH, $key, $enc, MCRYPT_MODE_ECB, $iv);
Run Code Online (Sandbox Code Playgroud) 我使用下面常用的库进行加密.我想从Mcrypt将其升级到OpenSSL,以便我不再使用已弃用的库.
我试图找出这是否可能.我对此做了一些研究,但我发现了相互矛盾的信息:
这篇文章说,使用用Mcrypt加密的OpenSSL无法解密数据. /sf/answers/1382394611/
但是,这篇文章说可以使用填充.看来我的函数使用了填充.这是否是使这项工作所需的正确填充类型? /sf/answers/2213033931/
<?php
namespace Utilities\Encryption;
/**
* A class to handle secure encryption and decryption of arbitrary data
*
* Note that this is not just straight encryption. It also has a few other
* features in it to make the encrypted data far more secure. Note that any
* other implementations used to decrypt data will have to do the same exact
* operations.
*
* Security Benefits:
*
* - Uses Key stretching
* …Run Code Online (Sandbox Code Playgroud) 目前我们在我们的系统上有一个mcrypt实现,用于在PHP应用程序中隐藏一些敏感数据.现在我们有了一个新的要求,我们必须将crypt模块更改为openssl.另一件重要的事情是我们使用密码河豚和模式ecb.所以我开始测试有什么区别以及如何使用openssl解密mcrypt加密字符串.
我使用标准的PHP函数:
两种方法都会产生不同的结果.第二件事是在两种类型的给定密码(河豚)和模式(ecb)中需要不同的IV长度(openssl = 0和mcrypt = 56).
有没有人知道如何在没有大量迁移工作的情况下轻松更改模块?
提前致谢!
更新:
这是代码,我测试了它:
<?php
function say($message){
if(!is_string($message)){
if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "<pre>";
echo var_export($message, true) . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
if(!isset($_SERVER["HTTP_USER_AGENT"])) echo "</pre>";
}else{
echo $message . ((!isset($_SERVER["HTTP_USER_AGENT"]) ? "\n" : "<br />"));
}
}
say("= Begin raw encryption");
$key = "anotherpass";
$str = "does it work";
say(" Params:");
say(" - String to encrypt '".$str."'");
say(" - Key: ".$key);
say("");
$params = array(
"openssl" => array(
"cipher" => "BF",
"mode" …Run Code Online (Sandbox Code Playgroud) 我正在开发一些(wordpress)插件,我打算为想要使用它的人获得许可费.
因此,我需要一种方法来确保此插件不会上传到任何人都可以下载并免费使用的服务器.
所以我在考虑使用API密钥.有效的API密钥=用户可以使用该插件.无效=插件不起作用.
我已经看过这篇文章的PHP API密钥生成器,但我并没有那么明智.
我也知道,因为它是PHP,任何人都可以进入代码并禁用API检查(我只是在猜测)
保护插件的最佳方法是什么?API密钥?其他方法?有没有人有关于这个主题的任何好的教程的链接?
因此,随着时间的推移,mcrypt将进入PHP 7.2.当然还有另一种选择:openssl.
我发现很难从mcrypt切换到openssl,使用AES 256 CBC并保留IV.我对密码学有点新意,所以我真的不知道所有内容,但我理解基础知识.
假设我有以下代码
function encrypt($masterPassword, $data)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($ivSize, MCRYPT_DEV_URANDOM);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $data, MCRYPT_MODE_CBC, $iv);
return base64_encode($iv . $encrypted);
}
function decrypt($masterPassword, $base64)
{
$keySize = mcrypt_get_key_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$ivSize = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC);
$key = mb_substr(hash('SHA256', $masterPassword), 0, $keySize);
$data = base64_decode($base64);
$iv = substr($data, 0, $ivSize);
$encrypted = substr($data, $ivSize, strlen($data));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC, $iv);
return trim($decrypted); …Run Code Online (Sandbox Code Playgroud) 我想创建一个安全的登录,所以我想在将其作为POST参数发送之前加密密码.我正在使用SHA1 javascript函数.
然后我意识到,如果有人截获加密密码,他可以立即使用它.将其作为post参数发送到相同的URL.
如何确保密码来自登录输入字段?也许用PHP会话?我还不想使用安全的http.任何人有一个简单的选择?
我正在试图找出一种方法来编写一个能够对纯文本URL进行去混淆的函数.
像这样的东西:
<input type="hidden" value="kjgajkwe@#jktGAkjgWjkajskd" name="obsfucatedString" />
Run Code Online (Sandbox Code Playgroud)
然后在处理那个表格的时候我想要去除它:
$url = deObfuscate($_POST['obsfucatedString']);
so $url would become something like:
$url = 'http://domain.com/filename.zip';
Run Code Online (Sandbox Code Playgroud)
这样的事情甚至可能吗?
我试图隐藏普通程序员视线中的网址.
我想我还需要写一些能阻碍字符串的东西
所以
$obsfucatedStringURL = obsfucate('http://domain.com/filename.zip');
Run Code Online (Sandbox Code Playgroud) Mysql AES_encrypt中有一个函数.
SELECT AES_encrypt( "Hello World", "password" ) AS encrypted_value
Run Code Online (Sandbox Code Playgroud)
这给出了结果: 9438eb79863e7009722fc3f0ad4b7198
但是当我使用php中的代码来执行AES_encrypt时,它给了我不同的值.
我从stackoverflow获得的PHP代码 - PHP AES加密/解密
<?php
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
$sSecretKey, $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND)
)
), "\0"
?>
Run Code Online (Sandbox Code Playgroud)
PHP代码的结果是 ytip2sEkD87gmRk3IVI09qE7T+RoLr20YK4rJp16NkY=
在php或codeigniter中是否有一个方法,以便它返回相同的值. - 谢谢.
当我将这些东西添加到我的mysql数据库时,我想加密我的php文件中的一些数据.
我就是这样做的.
我创建一个静态键,如:
$key = md5("uJHyFVSG");
Run Code Online (Sandbox Code Playgroud)
然后我有两个函数,名为encrypt()和decrypt(),他们这样做:
function encrypt($string, $key){
$string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB)));
return $string;
}
function decrypt($string, $key){
$string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB));
return $string;
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是最佳做法,但是我如何生成除md5以外的密钥?
php ×10
mcrypt ×5
encryption ×4
openssl ×3
security ×2
api-key ×1
codeigniter ×1
cryptography ×1
javascript ×1
json ×1
mysql ×1
php-7.1 ×1
scramble ×1
sha1 ×1
wordpress ×1