14

RSA非对称加密之PHP生成pem公钥私钥对及使用的两个实例

PHP生成pem公钥私钥对

如果不能生成密钥对,则修改验证变量$confs数组中的config值。

最初我不能生成公钥,是因为函数openssl_pkey_export(),只使用一前面两个参数,后台增加了后面两个参数就可以了。原因是:因为openssl_pkey_new($confs)中使用了$confs,那么函数openssl_pkey_export()也必须加入参数$confs。

实例一:

公钥加密(openssl_public_encrypt),
私钥解密(openssl_private_decrypt)。
私钥加密(openssl_private_encrypt),
公钥解密(openssl_public_decrypt)。
都是一个道理,代码类似。

RSA加密解密有个填充方式padding的参数,不同编程语言之间交互,需要注意这个。

padding can be one of OPENSSL_PKCS1_PADDINGOPENSSL_SSLV23_PADDINGOPENSSL_PKCS1_OAEP_PADDING,OPENSSL_NO_PADDING

值得注意的是,如果选择密钥是1024bit长的(openssl genrsa -out rsa_private_key.pem 1024),那么支持加密的明文长度字节最多只能是1024/8=128byte;

如果加密的padding填充方式选择的是OPENSSL_PKCS1_PADDING(这个要占用11个字节),那么明文长度最多只能就是128-11=117字节。如果超出,那么这些openssl加解密函数会返回false。

这时有个解决办法,把需要加密的源字符串按少于117个长度分开为几组,在解密的时候以172个字节分为几组。

其中的『少于117』(只要不大于117即可)和『172』两个数字是怎么来的,值得一说。

为什么少于117就行,因为rsa encrypt后的字节长度是固定的,就是密钥长1024bit/8=128byte。因此只要encrypt不返回false,即只要不大于117个字节,那么返回加密后的都是128byte。

172是因为什么?因为128个字节base64_encode后的长度固定是172。

这里顺便普及下base64_encode。encode的长度是和原文长度有个计算公式:

$len2 = $len1%3 >0 ? (floor($len1/3)*4 + 4) : ($len1*4/3);

 

实例二:

明文超出长度的代码(前提是1024bit的密钥长,OPENSSL_PKCS1_PADDING的填充方式,否则数字要变化)

在实际应用中,分析使用场景,再把两个实例再进行一下结合,相信就会更加美妙了,这里就不多写了。

PHP加密函数 sha256 sha512 sha256_file() sha512_file()

14

PHP把.cer证书内容转.pem格式字符串的封装函数

IOS的.cer证书内容转为pem格式内容

 

13

封装了两个PHP对称加密解密函数

为发数据传输的相对安全,在实际制作中,php对称加密解密相对简单有效而又很常用的选择。

对称加密函数一

对称加密封装函数二

php中所有加密算法和模型

RSA非对称加密之PHP生成pem公钥私钥对及使用的两个实例

 

13

PHP加密函数 sha256 sha512 sha256_file() sha512_file()

PHP sha256 sha512目前(PHP 7.1)没有内置的函数来计算,sha1() sha1_file() md5() md5_file()分别可以用来计算字符串和文件的sha1散列值和md5散列值,当前最新版本PHP 7.1 sha256() sha256_file() sha512() sha512_file()这样的函数也没有。SHA-2是SHA-224、SHA-256、SHA-384,和SHA-512的合称。
PHP 计算sha256 sha512可以使用hash()函数实现,计算文件的sha256 sha512则可以使用hash_file()实现。
hash($algo , $data, $rawOutput);
hash_file($algo , $filepath, $rawOutput);
其中$algo是算法,可以是sha256, sha512等值,支持的算法可以使用hash_algos()查看,该函数返回所有支持的算法。
$data是需要计算hash值的字符串,$filepath是需要计算hash值的文件名,可以是相对路径也可以是绝对路径。
$rawOutput是一个可选的布尔值参数,如果为true,则返回二进制数据,如果为false则返回字符串,默认值为false.
我们可以封装自定义函数来实现PHP 计算sha256 sha512以及其他类型的hash值。
以下代码实现PHP sha256() sha256_file() sha512() sha512_file() Continue reading

11

iOS开发证书配置和安装的详细步骤

首先说下写这篇文章的目的:
- 1、本篇文章所处环境为最新版Xcode7和最新版Apple Developer官网
- 2、以下所有截图均来自作者手动截图,以力保解读详细~。
- 3、这篇文章主要针对提交AppStore证书和个人真机调试证书的配置和使用,如需查询企业证书的配置和使用:


  1. 首先登陆Apple Developer官网开发者账号登陆

20160323160935828

20160323161000031


2、 初始化界面是这样子的(貌似是废话): Continue reading

08

物联开发相关名词解释

物联网

物联网是新一代信息技术的重要组成部分,IT行业又叫:泛互联,意指物物相连,万物万联。其英文名称是“The Internet of things”。由此,“物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。因此,物联网的定义是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的一种网络。

物联卡

物联卡,又叫物联网卡,物联网卡是由移动、电信、联通运营商提供的2/3/4G卡,外观与普通SIM卡基本一样,采用专用号段,满足智能硬件和物联网行业对设备联网的需求。

物联卡功能主要有:
1、基础通信能力:GPRS通信能力和短信通信能力,短信可提供不同优先级服务(重发频次、储存时间),充分满足不同集团客户需求。
2、终端状态查询:向客户提供开关机信息、终端位置信息、终端GPRS上线、离线、IP、APN等信息查询。
3、账务信息查询:向客户提供账户信息查询,提供账户欠费、流量超标等事件的提醒功能。
4、业务统计分析:向用户提供多维度的业务报表统计及分析等。
5、灵活计费功能:根据客户需求提供流量池、生命周期等多种计费方式。

流量卡和物联卡的区别:
物联卡业务是中国移动面向物联网用户提供的采用物联网专用的10648和14765号段作为MSISDN的移动通信接入业务,通过专用网元设备支持短信和GPRS等基础通信服务,并提供通信状态管理和通信鉴权等智能通道服务,默认开通物联网专用的短信接入服务号和物联网专用APN。
主要的区别就是计费方式的区别。
物联卡通常按照流量来收费,但是暂时没有或很少面向个人销售的物联卡,通常都是面向企业销售的批量的物联卡。

上位机、下位机

上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。

在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,也可以理解为主机和从机的关系,但上位机和下位机是可以转换的。
上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。

通常上位机和下位机通讯可以采用不同的通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。当用计算机和PLC通讯的时候,不但可以采用传统的D形式的串行通讯,还可以采用更适合工业控制的双线的PROFIBUS-DP通讯。采用封装好的程序开发工具就可以实现PLC和上位机的通讯,当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。

下位机会有相关的API文档或光盘或其它影像资料等。 Continue reading

07

PHP生成条形码

barcode官网下载barcodegen.1d-php5.v5.0.1.zip版本,查看官方文档

解压文件存放到本地测试服务器中,访问/index.php,跳转到/html/BCGcode39.php,页面效果如下:

20180407151049

生成条形码后,可以到此官网进行校验。

实例:

提交数据 /html/image.php?filetype=PNG&dpi=72&scale=2&rotation=0&font_family=Arial.ttf&font_size=10&text=961001272500&thickness=30&checksum=&code=BCGcode39

image.php 程序源码

 

07

百度云服务器之Nginx环境下伪静态配置

在网站根目录创建文件 bcloud_nginx_user.conf

将伪静态规则写在中括号内 location / { …… }

下面是一位客户从百度的Lighttpd环境迁移到Nginx环境之后,我帮他修改的规则。

写完规则,记得重启nginx,才能去吃饭哦!!!

相关文档:

百度Nginx环境高级配置

Nginx伪静态配置和常用Rewrite伪静态规则集锦

BCH配置伪静态

Windows主机IIS7开启伪静态功能Rewite

Apache Rewrite规则(伪静态)实例

31

一些需要禁用的PHP危险函数

phpinfo()
功能描述:输出 PHP 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高

exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高

scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中

chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高

chown()
功能描述:改变文件或目录的所有者。
危险等级:高

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中

readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

禁用方法如下:
打开/etc/php.ini文件,
查找到 disable_functions ,添加需禁用的函数名,如下:
phpinfo,eval,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

31

Python把HTML实体编码和Unicode编码\u转为中文汉字

某模块把获取的汉字转为HTML实体了,形式如〹 解码方法如下:

这样就把实体码翻译成汉语了。

PS. 实体码中有的符号不是&#开头,而是&开头的,匹配的时候要注意。

PSS. 实体码最后的分号不能少!