- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我更喜欢在 php 中使用 crypt 函数来进行密码加密和其他单向加密要求。因为我可以使用任何受支持的加密算法,通过更改 salt 并且几乎没有其他优势。通常,我不使用任何盐,它使用随机的 MD5 盐。我将此加密字符串作为密码哈希保存在数据库中,在验证用户身份时,我将其用作 crypt 函数的盐。它在 php 中工作正常。但是当需要任何其他编程语言来创建哈希时,当我在函数的 php 部分使用 crypt 函数时,我们就遇到了问题。
我想知道是否有任何简单的方法来创建 MD5 散列(使用 PHP md5() 函数或其他),这需要类似于使用 MD5 salt 时 crypt 函数生成的内容。如果我能在不使用 crypt 函数的情况下理解它在 php 中的工作原理,那么很有可能在其他编程语言中实现。
最佳答案
这里是实现相同功能的code in Java。这可能会帮助您用其他语言做同样的事情。
对于 PHP,您可能需要查看以下代码:
echo 'MD5: ' . crypt('mypassword', '$1$somesalt$') . "\n";
echo 'MD5: ' . mycrypt('mypassword', 'somesalt') . "\n";
function to64($s, $n)
{
$i64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$r = '';
while (--$n >= 0) {
$ss = $s & 0x3f;
$r .= $i64[$s & 0x3f];
$s >>= 6;
}
return $r;
}
function mycrypt($v, $s) {
$m = hash_init("md5");
hash_update($m, $v);
hash_update($m, '$1$');
hash_update($m, $s);
$m1 = hash_init("md5");
hash_update($m1, $v);
hash_update($m1, $s);
hash_update($m1, $v);
$final = hash_final($m1, true);
for ($pl = strlen($v); $pl>0; $pl-=16) {
hash_update($m, substr($final, 0, $pl > 16? 16:$pl));
}
$final = "\0";
for($i=strlen($v);$i!=0;$i>>=1) {
if (($i & 1) != 0) {
hash_update($m, $final);
} else {
hash_update($m, $v[0]);
}
}
$final = hash_final($m, true);
for($i=0;$i<1000;$i++) {
$m1 = hash_init("md5");
if(($i&1)) {
hash_update($m1, $v);
} else {
hash_update($m1, $final);
}
if(($i%3)) {
hash_update($m1, $s);
}
if(($i%7)) {
hash_update($m1, $v);
}
if(($i&1)) {
hash_update($m1, $final);
} else {
hash_update($m1, $v);
}
$final = hash_final($m1, true);
}
$l = '$1$'.$s.'$';
$l .= to64(ord($final[ 0])<<16 | (ord($final[ 6])<<8) | ord($final[12]), 4);
$l .= to64(ord($final[ 1])<<16 | (ord($final[ 7])<<8) | ord($final[13]), 4);
$l .= to64(ord($final[ 2])<<16 | (ord($final[ 8])<<8) | ord($final[14]), 4);
$l .= to64(ord($final[ 3])<<16 | (ord($final[ 9])<<8) | ord($final[15]), 4);
$l .= to64(ord($final[ 4])<<16 | (ord($final[10])<<8) | ord($final[ 5]), 4);
$l .= to64(ord($final[11]), 2);
return $l;
}
关于php - 如何使用 md5 函数而不是 crypt 函数创建 md5 散列,因为 crypt 函数使用 md5 salt 生成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5000448/
我想在 md-toolbar 中使用 mf-tabs,我使用 Sithdown 在 https://github.com/angular/material/issues/1076 中提供的解决方案 它
我是新手,我设法用服务提供的数据实现了我的 md-table。现在我正在尝试实现过滤器、排序和分页功能,但我认为我做错了什么。 这是我的组件: import { Component, OnInit,
我必须打开一个 md-dialog,其中包含一个带有两个选项卡的 md-tab-group。 md-dialog 可以从两个按钮打开,这两个按钮应该打开相应的选项卡。打开 md-dialog 的模板:
我正在尝试做这样的事情: {{item}}
我正在尝试使用 md-datepicker 遍历一个月的时间间隔,因此我创建了这个 codepen 示例以便更好地演示: http://codepen.io/anon/pen/ygBGOg 当单击“P
这是关于 Codepen 的例子. 我正在设置 md-row-height="30px" 然后计算 md-rowspan 使其等于元素数 + 1。(头部加一) {{ t
当我频繁切换 md-tabs 时,Md-tabs 切换正确但多个 md-tab-item 元素同时具有“md-active”类,所以我看不到选项卡的内容是事件的,因为它与其右侧选项卡的内容重叠。 据我
我想将操作放在同一数据行上,我有两个操作,为此我使用按钮和图标作为下面的代码。 {{item.codigo}} {{it
在我的对象列表中,我可以激活/非事件对象。因此,一个图标执行事件操作,另一个图标执行非事件操作,并且两者都在同一个 md-list 中。 This is what i'm tring to do 代码
如前所述 Angular-Material md-autocomplete's documentation : The md-autocomplete uses the the md-virtual-
我也在使用 Angular 1 和 Angular Material 。我想在 ng-repeat 中使用 md-subheader 和多个 md-virtual-repeat-container。您
我正在使用 Angular Material 。 当我创建自己的指令并将其添加到 md-tab-label 时,例如 Label 然后自定义指令也应用于一些“md-dummy-tab”。 但是
我在我的项目中使用 Angular Material 有一段时间了。在使用 md-select 时,我遇到了一个问题,即出现重复的 md-option 值错误。 我知道 md-options 采用唯一
我正在根据单选按钮选择设置自动完成验证 md-require-match = true/false。 默认验证是 md-require-match = true 这样用户应该从自动完成列表中选择一个项
这个问题在这里已经有了答案: Changing capitalization of filenames in Git (11 个答案) 关闭 3 年前。 我使用“readme.md”创建了我的存储库
Github有办法吗?在例如 README.md 中包含 md 文件? # Headline Text [include](File:load_another_md_file_here.md) 它不应
我正在使用 AngularJs 开发这个动态过滤系统,并试图找出如何将 color 和 size 选项转换为在两个下拉列表中(每个类别一个)。 我尝试了以下代码,该代码成功添加了下拉列表以及选择框中的
var app = angular.module('tabsDemo', ['ngMaterial']); app.controller('TabsController',tabsController
在 md-tab 指令内嵌套 md-select 和搜索输入时遇到问题。 有两个问题: 选择框展开后,必须向上滚动才能查看搜索输入 搜索输入实际上不接受任何文本 我做了一个codepen为了更好地说明
我正在尝试处理这个片段,其中自动完成功能嵌入在芯片中。但从自动完成中选择的项目不会转换为筹码。 自动完成的数据采用以下方式:{name:"John Doe", id:"1"} 哪里错了,请指教。 问候
我是一名优秀的程序员,十分优秀!