我正在创建一个编辑信息页面,但是当我调出密码数据时,它是加密的。有没有办法可以解密它?
这是我的代码,
<?php
require 'dbfunction.php';
$con = getDbConnect();
if (mysqli_connect_errno($con)) {
"Failed to connect to MySQL: " . mysqli_connect_error();
} else {
$result = mysqli_query($con, "SELECT * FROM admininfo where name = xyz");
while ($admininfo = mysqli_fetch_array($result)) {
?>
<div class="container">
<div class="row">
<center>
<h2>Edit Info Administrator</h2>
</center>
<form>
<div class="form-group">
<label class="col-sm-2 control-label">Name</label>
<div class="col-md-10">
<input type="text" class="form-control" value="<?php echo $admininfo['name']; ?>" name="name">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Password</label>
<div class="col-md-10">
<input type="password" class="form-control" placeholder="<?php echo $admininfo['password']; ?>" name="password">
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">Comfirm Password</label>
<div class="col-md-10">
<input type="password" class="form-control" placeholder="Confirm Password" name="confirmpassword">
</div>
</div>
<div class="form-group">
<div class="col-sm-10 col-sm-offset-2">
<input type="submit" value="edit account" class="btn btn-primary">
</div>
</div>
</form>
</div>
</div>
<?php } mysqli_close($con); } ?>
目前名称正在出现,只有密码是加密的。
答案 0 :(得分:5)
无法从您提供的代码中了解密码的加密方式。
如果操作正确,则密码将使用a salt and a hashing algorithm存储,而不是任何类型的可逆加密。在这种情况下,答案将是“否”。
您永远不需要知道密码是什么,只需设置一个新密码或将提交的密码与现有密码进行比较。后一种情况通过相同的散列算法运行提交的密码并比较两个散列来处理。
您的管理员可能不应该直接设置新密码,他们应该可以访问一个功能,该功能通过电子邮件向用户发送一个仅用于自己设置新密码的令牌。
答案 1 :(得分:2)
这是一个坏主意。目前,您已将$admininfo['password']
显示为占位符。这意味着即使输入的密码类型,其字符实际上也会在屏幕上显示。任何看着你肩膀的人都能看到它。不要这样做。
密码应该只存储在数据库中,只能进行哈希和盐渍。有一种方法可以检查某个明文是否是原始密码,但是没有办法解密哈希(除了暴力)。出于明显的安全原因,这样做就是这样做的。