使用php生成RSA公钥私钥及进行加密/解密/签名/验证

这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下。 简单介绍RSA: RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。但是有不少新手对它不太了解。下面仅作简要介绍。RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法。RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 下面为具体类:Rsa.class.php <?php /** * RSA算法类 * 签名及密文编码:base64字符串/十六进制字符串/二进制字符串流 * 填充方式: PKCS1Padding(加解密)/NOPadding(解密) * * Notice:Only accepts a single block. Block size is equal to the RSA key size! * 如密钥长度为1024 bit,则加密时数据需小于128字节,加上PKCS1Padding本身的11字节信息,所以明文需小于117字节 */ class RSA { private $pubKey = null; private $priKey = null; /** * 构造函数 */ public function __construct() { // 需要开启openssl扩展 if (!extension_loaded("openssl")) { $this->_error("Please open the openssl extension first."); } } /** * 读取公钥和私钥 * @param string $public_key_file 公钥文件(验签和加密时传入) * @param string $private_key_file 私钥文件(签名和解密时传入) */ public function init($public_key_file = '', $private_key_file = '') { if ($public_key_file) { $this->_getPublicKey($public_key_file); } if ($private_key_file) { $this->_getPrivateKey($private_key_file); } } /** * 自定义错误处理 */ private function _error($msg) { die('RSA Error:' .

jquery的serialize()不提交未选中的checkbox的问题

jquery的$(form).serialize()不会提交未选中的checkbox,解决方法是未选中时向页面插入一个同name的隐藏input。 $('input[type="checkbox"]').on("click", function () { var name = $(this).attr("name"); if ($(this).checked) { $(this).val(1); $(this).parent().find('input[type="hidden"][name="' + name + '"]').remove(); } else { $(this).val(0); $(this).parent().append('<input type="hidden" name="' + name + '" value="0">'); } }); 经过此方法设置后,checkbox序列被完整提交,原本被用户选定的checkbox的value为1,未被选定的value为0。

进程、线程与协程的比较

进程、线程和协程是三个在多任务处理中常听到的概念,三者各有区别又相互联系。 进程 进程是一个程序在一个数据集中的一次动态执行过程,可以简单理解为“正在执行的程序”,它是CPU资源分配和调度的独立单位。 进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执行过程中所需要使用的资源;进程控制块用来记录进程的外部特征,描述进程的执行变化过程,系统可以利用它来控制和管理进程,它是系统感知进程存在的唯一标志。 进程的局限是创建、撤销和切换的开销比较大。 线程 线程是在进程之后发展出来的概念。 线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。一个进程可以包含多个线程。 线程的优点是减小了程序并发执行时的开销,提高了操作系统的并发性能,缺点是线程没有自己的系统资源,只拥有在运行时必不可少的资源,但同一进程的各线程可以共享进程所拥有的系统资源,如果把进程比作一个车间,那么线程就好比是车间里面的工人。不过对于某些独占性资源存在锁机制,处理不当可能会产生“死锁”。 协程 协程是一种用户态的轻量级线程,又称微线程,英文名Coroutine,协程的调度完全由用户控制。人们通常将协程和子程序(函数)比较着理解。 子程序调用总是一个入口,一次返回,一旦退出即完成了子程序的执行。 协程的起始处是第一个入口点,在协程里,返回点之后是接下来的入口点。在python中,协程可以通过yield来调用其它协程。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的,通过相互协作共同完成任务。其运行的大致流程如下: 第一步,协程A开始执行。 第二步,协程A执行到一半,进入暂停,通过yield命令将执行权转移到协程B。 第三步,(一段时间后)协程B交还执行权。 第四步,协程A恢复执行。 协程的特点在于是一个线程执行,与多线程相比,其优势体现在: 协程的执行效率非常高。因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程的性能优势就越明显。 协程不需要多线程的锁机制。在协程中控制共享资源不加锁,只需要判断状态就好了。 Tips: 利用多核CPU最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。 Refer:https://blog.csdn.net/blateyang/article/details/78088851

以太坊创建测试区块和挖矿

新建genesis.json文件放到datadir目录下 { "config": { "chainId": 15, "homesteadBlock": 0, "eip155Block": 0, "eip158Block": 0, "ByzantiumBlock": 0 }, "coinbase" : "0x0000000000000000000000000000000000000000", "difficulty" : "0x40000", "extraData" : "", "gasLimit" : "0xffffffff", "nonce" : "0x0000000000000042", "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000", "timestamp" : "0x00", "alloc": {} } 制造创世区块 geth –datadir "./" init genesis.json 创建自己的私有链条 geth –identity "kilvn-test" –datadir "./" –nodiscover console 2>>geth.log –rpc –rpcapi "db,eth,net,web3,personal" 查看帐户列表 eth.accounts 新建一个帐户 personal.newAccount("123456") 查看第一个帐户

以太坊 Geth 的安装和使用,开启RPC接口

钱包的安装 windows2008安装geth https://geth.ethereum.org/downloads/ 下载window的.exe安装包,运行安装即可。 Ubuntu 安装geth sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-get install ethereum 启动钱包同步并开启geth rpc接口 windows2008 geth -fast -datadir "C:\Ethereum" –maxpeers 100 console 2>>geth.log –rpc –rpcapi "eth,personal" –rpcport 8545 –rpccorsdomain '"*"' Ubuntu下 geth –fast –datadir "/root/Gopath/eth_geth" –maxpeers 100 console 2>>"/root/Gopath/eth_geth/geth.log" –rpc –rpcapi "eth,personal,web3" RPC接口说明 –rpc –rpcapi "eth,personal,web3" 表示开启RPC接口,引号里面的表示开启的模块 连接到已经在运行的geth节点 geth attach http://localhost:8545 geth钱包同步状态 启动geth的时候加了console命令,表示进入命令行模式,geth的运行日志保存在geth.log文件内 查看geth同步状态,通过syncing命令 > eth.syncing false 返回false表示初次同步已完成,可以使用。

GitBook:使用Git+Markdown快速制作电子书

GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。 支持输出多种格式 GitBook支持输出多种文档格式,如: 静态站点:GitBook默认输出该种格式,生成的静态站点可直接托管搭载Github Pages服务上; PDF:需要安装gitbook-pdf依赖; eBook:需要安装ebook-convert; 单HTML网页:支持将内容输出为单页的HTML,不过一般用在将电子书格式转换为PDF或eBook的中间过程; JSON:一般用于电子书的调试或元数据提取。 结构简单 使用GitBook制作电子书,必备两个文件:_README.md_和_SUMMARY.md_。README.md多为电子书的简介内容,SUMMARY.md用来定义电子书章节结构,如: 同时,GitBook还支持嵌入JavaScript的交互式内容,未来版本会支持Python、Ruby等语言。 GitBook项目官网:http://www.gitbook.io GitBook Github地址:https://github.com/GitbookIO/gitbook 废话不说,直接主题: gitbook安装 安装npm 从网站 https://nodejs.org/#download 下载node.js源代码(点击绿色的INSTALL), gitbook 安装 $ npm install -g gitbook-cli $ gitbook -V 查看gitbook是否安装成功。 gitbook使用 根据目录生成图书结构 1.1 README.md 与 SUMMARY编写 README.md 这个文件相当于一本Gitbook的简介。 $ mkdir test_gitbook $ touch README.md SUMMARY.md 这个文件是一本书的目录结构,使用Markdown语法,如我们这本书的SUMMARY.md: $ touch SUMMARY.md $ vim SUMMARY.md 输入 * [简介](README.md) * [第一章](chapter1/README.md) – [第一节](chapter1/section1.md) – [第二节](chapter1/section2.

MySql按中文(汉字)拼音首字母检索

实现按拼音首字母检索一种是直接增加字段存储名称首字母,但是这样会使表都一个字段,每次录入都要转换 这是通常的做法,另一种是接下来介绍的这种,按照汉字编码排序来实现的,无需给表多增字段。 首先我们有一个这样的数组: array( 'A'=>'吖', 'B'=>'八', 'C'=>'嚓', 'D'=>'咑', 'E'=>'妸', 'F'=>'发', 'G'=>'旮', 'H'=>'铪', 'J'=>'丌', 'K'=>'咔', 'L'=>'垃', 'M'=>'嘸', 'N'=>'拏', 'O'=>'噢', 'P'=>'妑', 'Q'=>'七', 'R'=>'呥', 'S'=>'仨', 'T'=>'他', 'W'=>'屲', 'X'=>'夕', 'Y'=>'丫', 'Z'=>'帀' ); 查出姓名拼音首字母是a的 SELECT * FROMtbl WHERE CONVERT( name USING gbk ) COLLATE gbk_chinese_ci >='吖' AND CONVERT( name USING gbk ) COLLATE gbk_chinese_ci < '八' 查出姓名拼音首字母是b的 SELECT * FROMtbl WHERE CONVERT( name USING gbk ) COLLATE gbk_chinese_ci >='八' AND CONVERT( name USING gbk ) COLLATE gbk_chinese_ci < '嚓' …