<?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; } }
md5密码入库
猜你喜欢
转载自www.cnblogs.com/qq917937712/p/9503854.html
今日推荐
周排行