<?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 = "";
}
}

最新文章

  1. WPF 子窗体关闭时显示父窗体
  2. Xml与DataTable相互转换方法
  3. Asp.net 怎样去除表单多行文本框滚动条
  4. 【图文详解】python爬虫实战——5分钟做个图片自动下载器
  5. Codeforce Round #213 Div2
  6. linux中使用软链接时出现 too many levels of symbolic links
  7. Ubuntu防火墙 UFW 设置
  8. 运用BigDecimal精确计算
  9. iso8583报文自学笔记
  10. C#隐式类型
  11. redis学习心得之一【安装redis初体验】
  12. 关于php支持的协议与封装协议
  13. POJ2112Optimal Milking(二分法+floyd最短+网络流量)
  14. Lamp环境下设置绑定apache域名
  15. codeblocks+mbedtls库配置
  16. js 拼接table 的方法
  17. xampp打开显示缺少运行库的解决方法
  18. 听晴明老师从头讲React Native(原价399)百度云下载 百度网盘
  19. C/C++中extern和static
  20. Linux命令:help

热门文章

  1. duilib库分析2.第一篇UIManager
  2. day22_6-re模块
  3. day 50 MySQL数据备份与还原(mysqldump)
  4. PAT甲级——A1133 Splitting A Linked List【25】
  5. Django杂篇(1)
  6. Nginx 教程 2:性能
  7. 如何快速合并多个TXT文本内容
  8. vue倒计时:天时分秒
  9. 查看python安装位置和已安装库的相关操作
  10. leetcode-154-寻找旋转排序数组中的最小值