可能重复:
关于客户端的密码哈希系统
我必须保护我的网站用户的密码.我所做的是在服务器端使用MD5 加密哈希.但问题是密码保留为纯文本,直到它到达服务器,这意味着可以使用流量监控捕获密码.所以我想要的是使用客户端密码加密/散列机制并发送加密/散列密码.任何人都可以告诉你这样做的方法是什么?
我有很多用户输入$_GET和$_POST...目前我总是写mysql_real_escape_string($_GET['var'])..
我想知道你是否可以创建一个能够立即保护,转义和清理$_GET/ $_POST数组的函数,因此每次使用用户输入时都不必处理它.
我在想一个功能,例如cleanMe($input),和它里面,它应该做的mysql_real_escape_string,htmlspecialchars,strip_tags,stripslashes(我想这是所有做它的清洁与安全),然后返回$input.
这可能吗?使得对所有工作的功能$_GET和$_POST,所以你会做只有这个:
$_GET = cleanMe($_GET);
$_POST = cleanMe($_POST);
Run Code Online (Sandbox Code Playgroud)
那么在以后的代码中,当您使用eg $_GET['blabla']或者$_POST['haha']它们时,它们是安全的,剥离的等等?
试了一下自己:
function cleanMe($input) {
$input = mysql_real_escape_string($input);
$input = htmlspecialchars($input, ENT_IGNORE, 'utf-8');
$input = strip_tags($input);
$input = stripslashes($input);
return $input;
}
Run Code Online (Sandbox Code Playgroud) 众所周知,单向加密是加密数据库中用户密码的便捷方式.这样,即使数据库管理员也无法知道用户的密码,但必须输入密码,使用相同的算法对其进行加密,然后将结果与数据库中的加密密码进行比较.这意味着确定密码的过程需要大量的猜测和大量的处理能力.
看到计算机变得越来越快,数学家们仍然在开发这些算法,我想知道考虑到现代计算能力和加密技术哪一个是最安全的.
我几乎已经使用MD5几年了,我想知道是否还有更多我应该做的事情.我应该考虑不同的算法吗?
另一个相关问题:字段通常需要多长时间才能使用这样的加密密码?我必须承认我几乎一无所知加密,但我假设MD5哈希(作为一个例子)可能更长,并且可能需要更多的处理能力才能破解.或者字段的长度根本不重要,只要加密密码首先适合它?
我在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‰Â—
我目前正在使用以下内容来加密密码:
var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex');
Run Code Online (Sandbox Code Playgroud)
您能否提出改进建议,使项目更安全?
我想在登录前添加"记住我"复选框选项.
在用户的浏览器中安全存储cookie的最佳方法是什么?
例如,Facebook有"记住我"复选框,这样每次进入facebook.com时您都已登录.
我当前的登录使用简单的会话.
我试图从一个字符串计算一个SHA-1哈希,但是当我使用php的sha1函数计算字符串时,我得到的东西比我在C#中尝试时有所不同.我需要C#来计算与PHP相同的字符串(因为php中的字符串是由我无法修改的第三方计算的).如何让C#生成与PHP相同的哈希?谢谢!!!
String = s934kladfklada@a.com
C#代码(生成d32954053ee93985f5c3ca2583145668bb7ade86)
string encode = secretkey + email;
UnicodeEncoding UE = new UnicodeEncoding();
byte[] HashValue, MessageBytes = UE.GetBytes(encode);
SHA1Managed SHhash = new SHA1Managed();
string strHex = "";
HashValue = SHhash.ComputeHash(MessageBytes);
foreach(byte b in HashValue) {
strHex += String.Format("{0:x2}", b);
}
Run Code Online (Sandbox Code Playgroud)
PHP代码(生成a9410edeaf75222d7b576c1b23ca0a9af0dffa98)
sha1();
Run Code Online (Sandbox Code Playgroud) 我阅读了有关md5哈希的维基百科文章,但我仍然无法理解哈希如何不能"重构"回到原始文本.
有人可以向对密码学知之甚少的人解释这是如何工作的吗?该功能的哪一部分使其成为单向的?
我想用JavaScript加密,用PHP解密,使用公钥加密.我一直在努力寻找可以实现这一目标的库,但我遇到了问题.
我目前正在查看openpgpjs,但我需要在所有浏览器中提供支持,甚至测试页面也只在列出的受支持浏览器(Google Chrome)上出现错误.
关于最终目标的说明:
TCP连接已受SSL保护.这一保护层的主要目的是防止有意或无意的网络服务器日志记录,崩溃转储等.
在PHP端,将生成临时私钥(它将在短时间后过期).调用者(在Javascript中)负责在新的公钥到期时要求它.私钥到期的原因是为了防止记录加密数据解密,以防存储私钥的服务器稍后被泄露.
服务器受损的情况:有人获取除数据库服务器之外的所有计算机的备份(并且由于防火墙而无法访问数据库,即使他找到了用户和密码).由于加密记录数据的私钥不再存在,攻击者无法做到.
我正在编写一个小型ruby程序,用于在OAuth上使用Twitter,并且还没有找到正确的方法来执行HMAC-SHA1签名.到目前为止,我搞砸了
Base64.encode64(OpenSSL::HMAC.hexdigest(digest, key, stuff)).chomp
Run Code Online (Sandbox Code Playgroud)
但这会输出Twitter拒绝的内容,而不是有效的签名.我实际上以更糟糕的方式解决了它,请尽量不要打我:
php -r "echo rawurlencode(base64_encode(hash_hmac('sha1', '#{@signature}', '#{llave}', true)));"
Run Code Online (Sandbox Code Playgroud)
这最后一个实际上有效,我可以四处寻找我的东西.
我想要一些关于如何在不回复PHP的情况下实际执行此操作的提示.当我试图学习一门语言时,我不是很喜欢图书馆,所以宝石几乎是不可能的.
谢谢!
cryptography ×5
php ×5
passwords ×3
security ×3
cryptographic-hash-function ×2
javascript ×2
md5 ×2
sha1 ×2
aes ×1
algorithm ×1
c# ×1
cookies ×1
encryption ×1
jsp ×1
node.js ×1
pgp ×1
public-key ×1
remember-me ×1
rsa ×1
ruby ×1
ssl ×1
xss ×1