我正在尝试在PHP中创建一个随机字符串,我绝对没有输出:
<?php
function RandomString()
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 10; $i++) {
$randstring = $characters[rand(0, strlen($characters))];
}
return $randstring;
}
RandomString();
echo $randstring;
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我想在php中生成一个随机密码.
但是我得到所有'a'并且返回类型是数组类型,我希望它是一个字符串.有关如何更正代码的任何想法?
谢谢.
function randomPassword() {
$alphabet = "abcdefghijklmnopqrstuwxyzABCDEFGHIJKLMNOPQRSTUWXYZ0123456789";
for ($i = 0; $i < 8; $i++) {
$n = rand(0, count($alphabet)-1);
$pass[$i] = $alphabet[$n];
}
return $pass;
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
在PHP中生成安全随机数
我们需要生成一个加密随机字符串,用作身份验证令牌,该令牌将绑定到数据库中的会话数据.我们使用的是PHP,它似乎没有内置合适的随机数生成器.我们如何使用php生成N长度的加密安全随机字符串?
另请注意,由于我们的应用程序的性质,shell_exec不在桌面上.
我刚开始学习php,并决定让自己接受编码寄存器和登录脚本的挑战.
我不确定如何继续.现在,在你搜索我的代码之前......请不要成为关于sql注入和bobby表的漫步者.我明白了,但目前还没有看到它.
无论如何,我用漩涡和盐加密了密码.目前salt是静态的,不确定如何使用Time()函数实现一个,而不是通过将其定位在数据库中来破坏目的.我试图解决的问题是如何检查用户是否输入了与用户名和HASHED密码匹配的用户名和密码.
这是我目前的代码,我假设最重要的部分将在login.php文件中.
<?php
//connect.php
$connection = mysql_connect("localhost","root","") or die("Couldn't connect to database");
mysql_select_db("test", $connection);
?>
Run Code Online (Sandbox Code Playgroud)
<?php
//index.php
include 'connect.php';
define('salt','7hPqMO(m=F+!!L6(#Yhp-CdF, &Q}+cIrA;c@wcP(E--V<qRmq!v*aSnM;H=4cD0');
if(isset($_POST['username']) && isset($_POST['fullname']) && isset($_POST['email']) && isset($_POST['password'])) {
$username = mysql_real_escape_string($_POST['username']);
$fullname = mysql_real_escape_string($_POST['fullname']);
$email = mysql_real_escape_string($_POST['email']);
$password = mysql_real_escape_string($_POST['password']);
$encryptedPassword = hash( 'whirlpool',salt.$password );
$sql="INSERT INTO `users` (username, fullname, email, password)
VALUES
('$username', '$fullname','$email','$encryptedPassword')";
if(!mysql_query($sql,$connection)) {
die('Error: ' . mysql_error());
} else {
mysql_close($connection);
header('Location: login.php?redirectedFromRegister=1');
}
}
?>
<html>
<body>
<form action="index.php" method="post"> …Run Code Online (Sandbox Code Playgroud) 今天我了解到"密码"倾向于表示任意数量字符的可记忆字符串,而"密钥"表示高度随机的字符串(基于所使用的加密算法的特定长度).
所以今天我第一次听说了Key推导函数的概念.
我对如何从任意长度的密码(在PHP中)派生32字节密钥感到困惑.
以下方法有效但忽略了 "[盐]应随机生成"的说明(钠也是如此):
$salt = 'this salt remains constant';
$iterations = 10;
$length = 32;
$aesKey = hash_pbkdf2('sha256', $somePasswordOfArbitraryLength, $salt, $iterations, $length, false);
Run Code Online (Sandbox Code Playgroud)
以下方法也有效,但也不是很正确:
$hash = password_hash($somePasswordOfArbitraryLength, PASSWORD_BCRYPT, ['cost' => $iterations]);
$aesKey = substr($hash, -$length);//this smells weird
Run Code Online (Sandbox Code Playgroud)
通过我的所有搜索,我很惊讶我没有在PHP中找到一种"官方"方式来确定性地从密码中获取32字节密钥.
我该怎么办?
PS我在PHP中使用Laravel并希望使用AES-256-CBC加密,如下所示:
$encrypter = new \Illuminate\Encryption\Encrypter($aesKey, 'AES-256-CBC');
$encryptedText = $encrypter->encrypt($text);
Run Code Online (Sandbox Code Playgroud)
Laravel的加密助手(例如Crypt::encryptString('Hello world.'))似乎不符合我的要求,因为我希望每个用户的数据根据每个人的密码单独加密.
无论我使用哪种密钥派生函数,每次都会产生相同的密钥,因为我将使用对称加密来解密用户使用该密钥加密的字符串.
我将如何生成这个...我想保持我的主键顺序,并为添加到数据库的每个新对象生成一个12位数的唯一引脚.
它不能仅仅是自动增量的原因是我不希望序列号很容易猜到.
它需要是整数,因为我将需要在电话簿上拨打验证码.
我有一个需要生成的链接,以便它可以放在电子邮件中.当用户点击此链接时,系统意味着将电子邮件中发送的代码与用户匹配,因此它可以为该用户提取记录.
但是,我不太确定使用哪种加密/散列方法.对于登录在本网站管理员系统中,我使用PBKDF2在数据库中的密码(盐析)和AES加密,当它被发送到会话变量,但我不知道如果PBKDF2和AES中使用的字符是url兼容的.
基本上,我需要散列/生成随机代码以存储在数据库中的最佳方法和加密方法,以便我可以将一年和代码(我之前提到的)放在一个URL中.如果有帮助,我正在使用PHP和MySQL.
你们有什么感想?
想象一下将一个参数发送给PHP的javascript命令.让我们想象他总是发送如下:
var data_id = 'login =' +user_login+ 'password =' + user_pass;
Run Code Online (Sandbox Code Playgroud)
代码如下:
$.ajax({
type: "POST",
url: "functions/a-php/read/read_config.php",
data: data_id,
cache: false,
success: function(data_o){
}
});
Run Code Online (Sandbox Code Playgroud)
我想知道用户或黑客是否可以修改变量data_id,而不是发送参数login =,他发送一个带有名称的参数google=,他能做到吗?
我是PHP的新手,到目前为止创建了一个登录,注册和忘记密码,目前用户从MySQL表中发送了他们的密码.我现在使用sha1加密了密码.我目前正在编写代码:
当用户点击忘记密码链接时,他们输入用户名和电子邮件地址(已验证).
我目前发现很难在发送的电子邮件中向他们发送网址链接,以指示他们重置页面.
任何帮助将不胜感激(代码片段,教程,方法链接等).
钽