linux自带perl加密,关于perl转码,加密,时间取得的问题

pack可视为将一系列的片段的数值打包在一起,可用于对dev档案、socket、memory的读写,

因为这些需要一块完整的memory,而且需要事先打包成特定格式;

而unpack可以视为将将这些完整的 memory切割计算,取得我们所需要各部分的Variable。

#把一个字符串转为十六进制格式

my $source = 'abcd';

#这个'H'是说明转化为十六进制, 后面的*是任意长度,也就是说, 它转化后多少就多少

#如果单纯写unpack('H', $source), 只显示转化后的十六进制的第一位字符

unpack('H*', $source);

#将asicc码转为unicode,比如 1变成unicode是1 ,用unpack转过后就是49

#对应js中的str.charCodeAt(i)这个方法

unpack("U*", $num)

#sprintf()函数返回一个格式化字符串

# %c:一个带有给定数字的字符 %s:一个字符串 %d:一个有符号整数,十进制 %u:一个无符号整数,十进制

# %o:一个无符号整数,八进制 %x:一个无符号整数,十六进制 %e:一个浮点数,用科学记数法表示

# %f:一个浮点数,用固定的小数点表示 保留两位小数点 %.2f %b:一个无符号整数,二进制

# 对应js中的 toString(16)这个方法

sprintf("%1x",xxx)

比如现在要将7700000126000006201710181339这一串字符转化为unicode

用unpack方法最后得到的结果便是37373030303030313236303030303036323031373130313831333339

然后再将得到的unicode转化为16进制,最后得到的结果就是8e948b6697bd2e674c8f076467cf65e3583cd48c03b3d40d19401b296d5d9c40

在perl中加密用的是Digest::SHA这个包,而常用的加密方法则是这几个sha256 sha256_hex sha256_base64

所以一般就直接在加载包的时候就写上 use Digest::SHA qw(sha256 sha256_hex sha256_base64);

这里要说说明一下,hex代表16进制,Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,

Base64就是一种基于64个可打印字符来表示二进制数据的方法。

SHA即Secure Hash Algorithm,哈希散列算法,SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512

sha256_hex就代表说用16进制来读取需加密数据,再用sha-256进行加密

sha256_base64就是用base64格式读取需加密数据,再进行加密

在js中相对应的加密代码是

var shaObj = new jsSHA("SHA-256", "HEX");

shaObj.update(asiic);

var authcode = shaObj.getHash("B64");

需要注意的是 jsSHA("SHA-256", "HEX")这段代码,以hex(16进制)读入数据,再进行加密,这就需要先把数据先转换为16进制,这就是

上面提到的js的两步操作,而在perl中,无需这么麻烦,可以直接省略转化16进制的这一步,直接用sha256_base64进行加密。

再有就是取得系统时间的问题,在js中时间取得比较麻烦,因为取出来的系统时间不一定符合你需要的格式,所以需要进行再加工,比如

我要的时间是20180203,而js取得的时间则是201823,这时我就需要将取得时间进行格式上的再修改

var date = new Date();

var str = "yyyyMMddHHmm";

str = str.replace(/yyyy|YYYY/, date.getFullYear());

str = str.replace(/MM/, date.getMonth() >= 9 ? (date.getMonth() + 1) : '0' + (date.getMonth() + 1));

str = str.replace(/dd|DD/, date.getDate() > 9 ? date.getDate().toString() : '0' + date.getDate());

str = str.replace(/hh|HH/, date.getHours() > 9 ? date.getHours().toString() : '0' + date.getHours());

str = str.replace(/mm/, date.getMinutes() > 9 ? date.getMinutes().toString() : '0' + date.getMinutes());

需要写这么一大段代码

而在perl中则不必这么大费周章,直接调用 use POSIX qw(strftime) 这个方法即可

my $current_date = strftime( "%Y%m%d%H%M", localtime );

这么一段就解决问题了

一键复制

编辑

Web IDE

原始数据

按行查看

历史

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值