Centos7

CentOS7安装Python3的方法CentOS7搭建L2TP服务端一键脚本CentOS7使用CertBot工具获取LetSencrypt泛域名HTTPS证书

Git

GIT删除仓库的历史提交记录脚本示例GIT进行代码量统计和贡献统计

HTTP

HTTP关于HEADER的详细解释HTTP协议对URI长度POST数据长度及COOKIE长度限制说明HTTP关于Code状态码的详细解释

JavaScript

JavaScript下的RSA对称加密DEMOJavaScript解析并遍历Excel示例代码JavaScript调用语音合成Speech Synthesis API使用ElementUI配合API数据快速渲染合并表格

Linux

Linux 信号说明列表说明Linux利用CronTab定时执行ThinkPHP命令行模式

MySQL

MySQL字符串截取MySQL腾讯云数据库导出备份到本地服务器导入MySQL设计与使用规范MySQL在5.7及以上版本中的ONLY_FULL_GROUP_BY问题处理方案

Nginx

Nginx反向代理NodeJS实现WSS协议Nginx反向代理中的Host参数传递遇到的坑Nginx配置HTTPS与HTTP2.0Nginx负载均衡的lnmp环境初始化脚本Nginx图片递归代理服务器DEMO

NodeJS

NodeJS一些冷门但实用的npm包NodeJS使用Request模块实现CURLNodeJS使用express模块无法收到phpCurl的值NodeJS使用jimp和qrcode-reader识别解析二维码NodeJS实现UDP数据报套接字通讯NodeJS实现Websocket聊天室NodeJS实现串口通讯简单例程NodeJS实现微信协议登录NodeJS实现超级方便的Git自动发布WebhookNodeJS控制台简单表格打印NodeJS转码amr到mp3NWJS配置文件

Other

C#串口通信扫码枪数据读取支付宝Schema协议列表默克尔树基础算法示例博客的升级历程

PHP

PHP下RSA对称加密超长字符串分段加密DEMOPHP下phpMyAdmin数据字典美化代码PHP下的RSA对称加解密-根证书自签与签发子证书PHP使用root权限执行系统命令和切换到www用户PHP使用独占文件指针实现阻塞少量并发PHP多进程同时处理任务示例DEMO代码PHP大文件视频上传WebUploaderPHP实现Web方式发起一个超时任务的处理请求PHP实现二叉查找树的简单代码实现PHP实现微博登录简单代码PHP微信JSSDK开发DEMOPHP的坑XML转JSONPHP简单实现QQ登录代码PHP获取URL HTTP_HOST和SERVER_NAMEPHP获取上周、本周、上月、本月、本季度、上季度时间方法PHP获取真实IP之IP代理-IP伪造-真实IPPHP解密微信小程序手机号简单DEMOPHP高精度计算常用代码

Python

Python3使用Pool进程池实现多进程并发Python3使用jieba分词并生成WordCloud词云图Python3使用request进行CURL操作Python3实现WebhookPython3使用Selenium进行自动化测试手册

Wechat

微信公众号php环境无法获取POST值微信公众号网页跳转避免出现导航栏的小技巧
默克尔树基础算法示例
手机阅读

扫描二维码阅读文章
var crypto = require('crypto');
//定义一个hash算法 推荐使用sha256
function hash(str) {
    return crypto.createHash("sha256").update(str).digest("hex");
}
var hashList = [];
for (var i = 1; i <= 11; i++) {
    hashList.push({
        hash:hash(i.toString()),
        data:i.toString(),
    });
}
var startTime = new Date().getTime();
var merkleData = MerkleTree(hashList);
console.log(JSON.stringify(merkleData));
var endTime = new Date().getTime();
console.log("Progress finished in "+(endTime - startTime) + " ms");


//定义一个默克尔树算法
function MerkleTree(_hashList) {
    var _arr = [];
    for (var i = 0; i < _hashList.length; i += 2) {
        if (i + 1 >= _hashList.length) {
            //最后一个配对失败 将本次数据push到数组
            _arr.push({
                //hash值当前自己的hash值再一次最终hash得到结果
                hash:hash(_hashList[i].hash),
                sub:[
                    {
                        hash:_hashList[i].hash,
                        data:_hashList[i].data,
                        sub:_hashList[i].sub,
                    }
                ]
            });
        } else {
            //配对成功 成对PUSH到数组
            _arr.push({
                //hash值为两个子数据分别的hash值组合后最终hash得到结果
                hash:hash(_hashList[i].hash+_hashList[i+1].hash),
                sub:[
                    {
                        hash:_hashList[i].hash,
                        data:_hashList[i].data,
                        sub:_hashList[i].sub,
                    },
                    {
                        hash:_hashList[i+1].hash,
                        data:_hashList[i+1].data,
                        sub:_hashList[i+1].sub,
                    }
                ]
            });
            
        }
    }
    if(_arr.length>1){
        //数组长度大于1 需要递归处理
        return MerkleTree(_arr);
    }else{
        //已处理完成 直接返回结果
        return _arr;
    }
}
[
    {
        "hash": "fcdaa7d664c88e48901bd06c20fa973e52727bd488e8d9f257ca70977fd29ee6",
        "sub": [
            {
                "hash": "c27450cd3fd4df029145f3437ae9c381e0ae55e8400de06cb973005b36d7b222",
                "sub": [
                    {
                        "hash": "85df8945419d2b5038f7ac83ec1ec6b8267c40fdb3b1e56ff62f6676eb855e70",
                        "sub": [
                            {
                                "hash": "33b675636da5dcc86ec847b38c08fa49ff1cace9749931e0a5d4dfdbdedd808a",
                                "sub": [
                                    {
                                        "hash": "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b",
                                        "data": "1"
                                    },
                                    {
                                        "hash": "d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35",
                                        "data": "2"
                                    }
                                ]
                            },
                            {
                                "hash": "13656c83d841ea7de6ebf3a89e0038fea9526bd7f686f06f7a692343a8a32dca",
                                "sub": [
                                    {
                                        "hash": "4e07408562bedb8b60ce05c1decfe3ad16b72230967de01f640b7e4729b49fce",
                                        "data": "3"
                                    },
                                    {
                                        "hash": "4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a",
                                        "data": "4"
                                    }
                                ]
                            }
                        ]
                    },
                    {
                        "hash": "e0e2d0cec0ef7e8fc458e516dfde82890c183431a3f9efae9e4693fc23dfa36a",
                        "sub": [
                            {
                                "hash": "43587f59c00a8e528bc7636fabaffcf70cc25afc5b4d53df797faf0dc72f6dd0",
                                "sub": [
                                    {
                                        "hash": "ef2d127de37b942baad06145e54b0c619a1f22327b2ebbcfbec78f5564afe39d",
                                        "data": "5"
                                    },
                                    {
                                        "hash": "e7f6c011776e8db7cd330b54174fd76f7d0216b612387a5ffcfb81e6f0919683",
                                        "data": "6"
                                    }
                                ]
                            },
                            {
                                "hash": "ada17dcc2d615cc0d982a538b618f45441e798c38b1df9f3dd273e386eba1363",
                                "sub": [
                                    {
                                        "hash": "7902699be42c8a8e46fbbb4501726517e86b22c56a189f7625a6da49081b2451",
                                        "data": "7"
                                    },
                                    {
                                        "hash": "2c624232cdd221771294dfbb310aca000a0df6ac8b66b696d90ef06fdefb64a3",
                                        "data": "8"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "hash": "6fc2161ebda449ae54f7ed9f01afb60f3c0bba92dee416738f0cd1dc8ef79c56",
                "sub": [
                    {
                        "hash": "84c4bb77dd7624f12e8b1547c220b51fd53107c38ae722fea5603319960c4fc4",
                        "sub": [
                            {
                                "hash": "76d4c0b6f7f7cc7122ea4e442c4d2a4af4578855a1dfd3803db52a38b48be8f9",
                                "sub": [
                                    {
                                        "hash": "19581e27de7ced00ff1ce50b2047e7a567c76b1cbaebabe5ef03f7c3017bb5b7",
                                        "data": "9"
                                    },
                                    {
                                        "hash": "4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5",
                                        "data": "10"
                                    }
                                ]
                            },
                            {
                                "hash": "1ba586c0b89202f7307b61f1229330978a843afc98589ffc6a62f209225d3528",
                                "sub": [
                                    {
                                        "hash": "4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8",
                                        "data": "11"
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    }
]