我不时听到"使用bcrypt在PHP中存储密码,bcrypt规则"的建议.
但是什么bcrypt呢?PHP没有提供任何此类功能,维基百科关于文件加密实用程序的唠叨和Web搜索只是揭示了不同语言的Blowfish的一些实现.现在Blowfish也可以通过PHP获得mcrypt,但是如何帮助存储密码?Blowfish是一种通用密码,它有两种工作方式.如果它可以加密,则可以解密.密码需要单向散列函数.
解释是什么?
在常见的PHP安装中进行双向加密的最简单方法是什么?
我需要能够使用字符串密钥加密数据,并使用相同的密钥在另一端解密.
安全性并不像代码的可移植性那么重要,因此我希望能够尽可能简化事情.目前,我正在使用RC4实现,但如果我能找到本机支持的东西,我想我可以节省很多不必要的代码.
我的意思是:
Original String + Salt or Key --> Encrypted String
Encrypted String + Salt or Key --> Decrypted (Original String)
Run Code Online (Sandbox Code Playgroud)
也许是这样的:
"hello world!" + "ABCD1234" --> Encrypt --> "2a2ffa8f13220befbe30819047e23b2c" (may be, for e.g)
"2a2ffa8f13220befbe30819047e23b2c" --> Decrypt with "ABCD1234" --> "hello world!"
Run Code Online (Sandbox Code Playgroud)
尝试使用Crypt_Blowfish,但它对我不起作用.
我正在创建一个存储密码的应用程序,用户可以检索和查看密码.密码用于硬件设备,因此检查哈希是不可能的.
我需要知道的是:
如何在PHP中加密和解密密码?
使用加密密码最安全的算法是什么?
我在哪里存储私钥?
除了存储私钥,最好是要求用户在需要密码解密时输入私钥吗?(可以信任此应用程序的用户)
密码以什么方式被窃取和解密?我需要注意什么?
我在PHP中找到了en/decode字符串的示例.起初它看起来非常好,但它不会工作:-(
有谁知道问题是什么?
$Pass = "Passwort";
$Clear = "Klartext";
$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypted: ".$crypted."</br>";
$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypted: ".$newClear."</br>";
function fnEncrypt($sValue, $sSecretKey) {
return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, $sDecrypted, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))));
}
function fnDecrypt($sValue, $sSecretKey) {
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sSecretKey, base64_decode($sEncrypted), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)));
}
Run Code Online (Sandbox Code Playgroud)
结果是:
加密: boKRNTYYNp7AiOvY1CidqsAn9wX4ufz/D9XrpjAOPk8=
解密: —‚(ÑÁ ^ yË~F'¸®Ó–í œð2Á_B‰Â—
我想知道在为MySQL凭证/主机创建变量时,最佳做法是什么或建议做什么.
define('HOST', 'localhost');
// etc..
mysql_connect(HOST, // etc...
Run Code Online (Sandbox Code Playgroud)
VS
$host = 'localhost';
// etc..
mysql_connect($host, // etc...
Run Code Online (Sandbox Code Playgroud)
对于这两者,您可以轻松检查声明的变量或常量是什么,并且可以轻松找到值.我有多个用户可以共享和使用的代码.
保护这些变量的最佳方法是什么?
在node.js中,我使用build in函数来加密数据,如下所示:
var text = "Yes";
var password = "123456";
var encrypt = crypto.createCipher('aes-256-cbc', password);
var encryptOutput1 = encrypt.update(text, 'base64', 'base64');
var encryptOutput2 = encrypt.final('base64');
var encryptedText = encryptOutput1 + encryptOutput2;
Run Code Online (Sandbox Code Playgroud)
输出(加密文本)是:OnNINwXf6U8XmlgKJj48iA ==
然后我用PHP解密它:
$encrypted = 'OnNINwXf6U8XmlgKJj48iA==';
(or $encrypted = base64_decode('OnNINwXf6U8XmlgKJj48iA==') );
$dtext2 = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, $encrypted, MCRYPT_MODE_CBC);
echo "Decrypted: $dtext2";
Run Code Online (Sandbox Code Playgroud)
我会得到一些有趣的角色,我无法解密它.我尝试使用/不使用base64_decode或MCRYPT_RIJNDAEL_128 ..都失败了.
然后我检查PHP中的加密方式,它看起来与node.js的输出有很大的不同.
$text = "Yes";
$key = "123456";
$eText = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_CBC);
echo "Encrypted: $eText \n";
echo "base64: " . base64_encode($eText) . " \n";
$dtext1 = …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用PHP加密和解密密码的最佳方式?
我最近用PHP做了很多事情,想要建立我的第一个登录/注册系统.因此,我一直在网上做很多阅读,以找出实现这一目标的最佳方法.我遇到了几个指南,我对几个实例感到困惑,在开始这条路之前我想确定一下.
我的问题是我究竟如何使用河豚?我已经读过如果提供适当的盐,crypt()将自动选择河豚.如果是这样的话,是什么让盐河豚适合?
现在,我有一个脚本,它从日期和时间中取出一个盐,一个随机数,然后哈希为盐.那是否可以与河豚一起使用?
我使用了此问题接受的解决方案,例如在/index.php?id=3中通过id进行加密.问题是我无法将加密值作为网址发送,例如/index.php?id=dsf13f3343f23/23=.因为有时它会在网址中包含奇怪的字符,例如最后注意=标记
我想知道在数据库中存储文本并加密它以防止其他人(管理员)阅读它的最佳方法.我允许用户编写(最多)纯文本段落,然后存储在数据库中.然后,该文本将在其帐户中显示给用户.这意味着我必须能够在加密数据并将其存储在数据库中后对数据进行解密.(我使用PHP创建了项目)
谢谢