md5密码入库
2024-08-31 03:38:05
<?php
//连接数据库
$pdo = new PDO('mysql:host=localhost;dbname=md5;charset=UTF8', 'root', '');
# 设置为false,保证返回数据的结果中,字段类型和数据库中字段类型一致。否则int字段的数据,返回结果可能是字符串类型
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); //配置项 # 定义字符串
$str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_@!#%;.";
// $str = "abcde";
# 设置密码长度
$pass_len = 5; //N进制算法
function createNext($str,$arr){ $tmpStr = '';
$isAdd = false; for($i = strlen($str)-1;$i>=0;$i--){ $char = substr($str,$i,1); if($i===strlen($str)-1){
foreach ($arr as $key => $value) {
if($value === $char){
if($key+1 < count($arr)){
$tmpStr = $arr[$key+1].$tmpStr;
}else{
$tmpStr = $arr[0].$tmpStr;
$isAdd = true;
}
}
}
}else{
if($isAdd){
foreach ($arr as $key => $value) {
if($value === $char){ if($key+1 < count($arr)){
$tmpStr = $arr[$key+1].$tmpStr;
$isAdd = false;
}else{
$tmpStr = $arr[0].$tmpStr;
$isAdd = true;
}
}
}
}else{
$tmpStr = $char.$tmpStr;
}
}
} if($isAdd){
$tmpStr = $arr[1].$tmpStr;
}
return $tmpStr;
} // $str = "abcde";
$str_len = strlen($str);
$arr = [];
for($i=0;$i<$str_len;$i++){
$arr[] = substr($str,$i,1);
} //批量插入隔断,数据达到这个数量的时候,执行一次SQL语句
$pageSize = pow($str_len,2); # 进制算法的第一个数字(字母)
// $firstStr = "aaaaaa";
$firstStr = "";
$firstWord = substr($str,0,1);
for($k = 0 ; $k < $pass_len ; $k++ ){
$firstStr .= $firstWord;
} $total = pow($str_len,$pass_len);
$values = ",('".$firstStr."','".md5($firstStr)."','".md5(md5($firstStr))."','".sha1($firstStr)."')"; for ($i=2; $i <= $total; $i++) {
$res = createNext($firstStr,$arr);
$firstStr = $res; $values .= ",('".$firstStr."','".md5($firstStr)."','".md5(md5($firstStr))."','".sha1($firstStr)."')";
if($i%$pageSize == 0){
# 分表。控制每张表中数据的数据量
$table = 'md5_'.$pass_len."_".(int)($i/(pow($str_len,6)));
createTable($table);
$sql = "INSERT INTO ".$table."(`p`,`md5`,`md5md5`,`sha1`) values ".trim($values,",").";";
$stmt = $pdo->prepare($sql);
if (!$stmt->execute()) {
echo "执行SQL失败:".$sql."<br/>";
die;
}
$values = "";
}
} function createTable($table){
global $pdo;
$sql = "CREATE TABLE IF NOT EXISTS ".$table."(
`id` int(12) NOT NULL AUTO_INCREMENT,
`p` VARCHAR (32) DEFAULT NULL,
`md5` VARCHAR (32) DEFAULT NULL,
`md5md5` VARCHAR (32) DEFAULT NULL,
`sha1` VARCHAR (40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE = MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET = utf8";
$stmt = $pdo->prepare($sql);
if (!$stmt->execute()) {
echo "创建数据表失败:".$sql."<br/>";
die;
}
}
写入文件。测试过一个5位数的md5加密文件,大小占到164G。和mysql数据库差不多
//配置项 # 定义字符串
// $str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_@!#%;.";
$str = "abcde";
# 设置密码长度
$pass_len = ; //N进制算法
function createNext($str,$arr){ $tmpStr = '';
$isAdd = false; for($i = strlen($str)-;$i>=;$i--){ $char = substr($str,$i,); if($i===strlen($str)-){
foreach ($arr as $key => $value) {
if($value === $char){
if($key+ < count($arr)){
$tmpStr = $arr[$key+].$tmpStr;
}else{
$tmpStr = $arr[].$tmpStr;
$isAdd = true;
}
}
}
}else{
if($isAdd){
foreach ($arr as $key => $value) {
if($value === $char){ if($key+ < count($arr)){
$tmpStr = $arr[$key+].$tmpStr;
$isAdd = false;
}else{
$tmpStr = $arr[].$tmpStr;
$isAdd = true;
}
}
}
}else{
$tmpStr = $char.$tmpStr;
}
}
} if($isAdd){
$tmpStr = $arr[].$tmpStr;
}
return $tmpStr;
} $str_len = strlen($str);
$arr = [];
for($i=;$i<$str_len;$i++){
$arr[] = substr($str,$i,);
} //批量插入隔断,数据达到这个数量的时候,执行一次SQL语句
$pageSize = pow($str_len,); # 进制算法的第一个数字(字母)
// $firstStr = "aaaaaa";
$firstStr = "";
$firstWord = substr($str,,);
for($k = ; $k < $pass_len ; $k++ ){
$firstStr .= $firstWord;
} $total = pow($str_len,$pass_len);
$values = $firstStr." ".md5($firstStr)." ".md5(md5($firstStr))." ".sha1($firstStr); for ($i=; $i <= $total; $i++) {
$res = createNext($firstStr,$arr);
$firstStr = $res;
$values .= " ".$firstStr." ".md5($firstStr)." ".md5(md5($firstStr))." ".sha1($firstStr);
if($i%$pageSize == ){
# 分表。控制每张表中数据的数据量
$myfile = 'md5_'.$pass_len."_".(int)($i/(pow($str_len,)));
if (file_exists($myfile)) {
file_put_contents($myfile, $values, FILE_APPEND);
}else{
$thisfile = fopen($myfile, "w") or die("Unable to open file ".$myfile);
fwrite($thisfile, $values);
}
$values = "";
}
}
最新文章
- WPF 子窗体关闭时显示父窗体
- Xml与DataTable相互转换方法
- Asp.net 怎样去除表单多行文本框滚动条
- 【图文详解】python爬虫实战——5分钟做个图片自动下载器
- Codeforce Round #213 Div2
- linux中使用软链接时出现 too many levels of symbolic links
- Ubuntu防火墙 UFW 设置
- 运用BigDecimal精确计算
- iso8583报文自学笔记
- C#隐式类型
- redis学习心得之一【安装redis初体验】
- 关于php支持的协议与封装协议
- POJ2112Optimal Milking(二分法+floyd最短+网络流量)
- Lamp环境下设置绑定apache域名
- codeblocks+mbedtls库配置
- js 拼接table 的方法
- xampp打开显示缺少运行库的解决方法
- 听晴明老师从头讲React Native(原价399)百度云下载 百度网盘
- C/C++中extern和static
- Linux命令:help