我正在编写脚本并需要保存密码.出于开发目的,我一直在使用该crypt()功能,因为它简单易用.现在我已经完成了,我想用一些更好,更一致的东西来代替它.
我所担心的一些问题是:
我想要一些适用于PHP 4.3+的东西.
有什么可用的,还是我应该坚持crypt()?我想过要用md5(md5($password).$salt).感谢您的见解.
我只是想用来crypt()生成一个加密的密码,我写了一个调用该crypt()方法的demo .这是我的代码
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%s\n",crypt("abc","ab"));
exit(0);
}
Run Code Online (Sandbox Code Playgroud)
我使用它编译它"gcc tem.c -lcrypt',当我运行它时,一切似乎都正确,但出现"段错误".请告诉我这个简单的程序有什么问题?
我正在使用GCC 4.6.0(在另一个未经识别的平台上).
我正在使用该crypt()功能来加密密码.
我以前从未使用过该功能所以我检查了主页:
man 3 crypt
Run Code Online (Sandbox Code Playgroud)
它说包括unistd.h标题.
但是,当我这样做时,我得到了一个隐含的crypt函数警告.
warning: implicit declaration of function ‘crypt’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)
我做了一些搜索,我发现你必须包括crypt.h.但是,为什么在man手册页中没有说呢?
我有一个使用crypt()的问题,如果用户有密码(本例中为password1),并且将其更改为password2,则哈希返回相同的结果.您可以在此处测试:OLD LINK 键入password1作为当前密码,password2作为新密码并确认密码,您将看到结果.如果输入完全不相似的密码,则没有问题.我知道还有其他方法可以使用哈希密码等.我比任何事都更好奇.我的代码如下:
<?php
$oldpassword="password1";
echo "<form method=\"post\">
<p>Enter Current Password: <input type=\"password\" name=\"currentpassword\" /></p>
<p>Enter New Password: <input type=\"password\" name=\"password\" /></p>
<p>Confirm New Password: <input type=\"password\" name=\"confirmpassword\" /></p>
<p><input type=\"submit\" value=\"Change Password\"></p>
</form>";
$user_id = $_SESSION['user_id'];
$pass=$_POST['password'];
$salt = 'xxxxx';
$currentpassword = crypt($_POST['currentpassword'], $salt);
$oldpassword = crypt($oldpassword, $salt);
if(isset($_POST['password'])) {
if ($currentpassword !== $oldpassword) {
echo "The password you entered for current password does not match our records.";
}
else {
if ($_POST['password'] && $_POST['confirmpassword']) {
if ($_POST['password'] …Run Code Online (Sandbox Code Playgroud) 我的测试用例如下:
echo crypt('string', '_....salt');//error
echo crypt('string', '_A...salt');//fast
echo crypt('string', '_AAAAsalt');//slow
Run Code Online (Sandbox Code Playgroud)
解释如http://www.php.net/manual/en/function.crypt.php所述:
CRYPT_EXT_DES - 扩展的基于 DES 的哈希。“salt”是一个 9 个字符的字符串,由下划线后跟 4 个字节的迭代计数和 4 个字节的 salt 组成。这些被编码为可打印字符,每个字符 6 位,最低有效字符在前。值 0 到 63 编码为“./0-9A-Za-z”。在 salt 中使用无效字符将导致 crypt() 失败。
点是可打印字符,那么为什么它会返回错误呢?哪个“顺序”适用于所使用的字符,导致“AAAA”比“A...”有更多的迭代次数?
我正在尝试加载在不同主机上生成并导入到我的机器上的自签名证书。证书已导入并正确显示在 mmc 中。但是,当通过 SHA1 指纹搜索时,CertFindCertificateInStore 无法加载。
这是代码:
const LPWSTR certThumbprint = L"2af92932d0164f52b20b1ccfdf0e1e4d525fbc08";
CryptStringToBinary(certThumbprint, SHA1_HASH_STRING_LENGTH, CRYPT_STRING_HEXRAW, NULL, &dwHashDataLength, NULL,NULL);
pHashData = new BYTE[dwHashDataLength];
CryptStringToBinary(certThumbprint,SHA1_HASH_STRING_LENGTH,CRYPT_STRING_HEXRAW,pHashData,&dwHashDataLength,NULL, NULL);
hashBlob.cbData = dwHashDataLength;
hashBlob.pbData = pHashData;
if ( !(pCertContext = CertFindCertificateInStore(
hSystemCertStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
0,
CERT_FIND_SHA1_HASH,
&hashBlob,
NULL)))
{
printf("\n finding cert in system store failed: %d \n", GetLastError());
exit(-1);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试crypt()在 JavaScript 中复制 PHP 的函数,以生成 SHA512 哈希,例如:
$hash = crypt( $text, '$6$' . $salt );
Run Code Online (Sandbox Code Playgroud)
这会生成如下内容:
$6$salt$hashedtext
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用CryptoJS,如下所示:
var hash = CryptoJS.SHA512( text );
Run Code Online (Sandbox Code Playgroud)
这确实为我生成了 SHA512 哈希,如下所示:
hashedtext
Run Code Online (Sandbox Code Playgroud)
但我看不到任何提供盐的方法。我以前从未使用过 CryptoJS,所以我在这方面完全是新手......但我已经做了一些谷歌搜索并且无法找到答案。希望这很简单,只是逃避我。
如何生成与crypt()示例返回的上述格式字符串匹配的字符串?
我正在尝试生成加密的密码字符串,类似于 Linux 中的 /etc/shadow。出于某种原因,我得到的输出是不同的。任何想法我错过了什么,一个比另一个长(不计算盐部分)?
#!/usr/bin/python
import crypt
alg = 6 # SHA512
salt = 'vb1tLY1qiY'
word = 'password'
insalt = '${}${}$'.format(alg, salt)
cryptWord = crypt.crypt(word, insalt)
print cryptWord
Run Code Online (Sandbox Code Playgroud)
输出是: $6FMi11BJFsAc
如果我像这样在 Linux 中生成它:
mkpasswd --method=sha-512 --salt=vb1tLY1qiY password
Run Code Online (Sandbox Code Playgroud)
输出是: $6$vb1tLY1qiY$WFHTa6CRShEuKg63vuPTYOVRK1oQiM6johIEs2JslF1904VhEdSXlHje74eB4uLXHrKNyZ4bPjSlWpZD6qIo71
我在查找 python 模块时,发现了一个叫做“crypt”的东西。我不明白。我试过阅读这个,这是什么“盐”的东西,这个 crypt 模块的用途是什么,有没有某种方法可以将“crypt”应用于这段 python 代码?:
import crypt
max_attempts = 3
attempt = 0
try:
while attempt < max_attempts:
uname = input('Username: ')
password = input('pass: ')
if uname == 'admin' and password == 'Khs9':
print('Welcome Admin')
break
else:
attempt += 1
if attempt == max_attempts:
raise RuntimeError("\nYou've reached the maximum number of attempts allowed.")
else:
print('Wrong credentials.\n Try again or press <ctrl+c> to exit.\n')
continue
except KeyboardInterrupt:
print('Terminated by the user.\nGood-bye.')
except RuntimeError as e:
print("Goodbye")
Run Code Online (Sandbox Code Playgroud) 我正在寻找的是函数的解密crypt(3)函数。阅读手册,他们只推荐我查看login(1), passwd(1), encrypt(3), getpass(3), passwd(5),但据我所知,它们中没有一个可用于解密字符串。
我一起写了一个小程序来说明我的观点,我要找的功能是 somefunctogetbackplaintext(...)
#define _XOPEN_SOURCE
#include <unistd.h>
#include <string.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
char *cryptated = crypt(argv[1], "aa"); // Password and salt
if(strcmp("somepassword", somefunctogetbackplaintext(argv[1], cryptated, "aa"))) //Plain text, cryptated string, salt
{
printf("Success!\n");
}
else
{
printf("Not a success!\n");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) crypt ×10
c ×4
php ×4
hash ×2
python ×2
sha512 ×2
c++ ×1
certificate ×1
des ×1
encryption ×1
javascript ×1
linux ×1
module ×1
osx-yosemite ×1
python-3.x ×1
salt ×1
unix ×1