php7.1.3 ide,蘑菇博客 – 第2页 – A Developer Note

我们经常使用的 Base64 编码用来对字符串或者字节数组进行编码转换,以方便存储。可是Base64 编码的结果可能会带有特殊字符,应用场景有限。

而 Base16 编码生成的结果是用[0-9A-F]十六个字符表示,可以用来生成字符索引和文件名等,应用范围比 Base64 要大的多。

缺点的话 Base16 编码的结果字符串比 Base64 编码的结果字符串要长, Base64 大概是1.3倍长,而 Base16 是原长度的两倍。

Base16 编码的原理是先获取字符串每个字节的二进制值,高位用0补充到8位。然后每4比特分割成一组,每组的二进制值转换成十进制,然后再对应到[0-9A-F],对应的结果就是编码的值。

PHP 官方并没有 Base16 的编码实现,使用下面的函数就可以实现Base16的编码和解码。

function base16_encode($string)

{

$encode = '';

$chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];

for ($i = 0; $i < strlen($string); $i++) {

$encode .= $chars[(ord($string[$i]) & 0b11110000) >> 4] . $chars[ord($string[$i]) & 0b00001111];

}

return $encode;

}

function base16_decode($encode)

{

$result = '';

for ($i = 0; $i < strlen($encode) / 2; $i++) {

$result .= chr(intval(substr($encode, $i * 2, 2), 16));

}

return $result;

}

发布于2020年2月16日

归类为php

#!/bin/bash

curl -O http://nginx.org/download/nginx-1.16.1.tar.gz

tar zxf nginx-1.16.1.tar.gz

curl -O http://zlib.net/zlib-1.2.11.tar.gz

tar zxf zlib-1.2.11.tar.gz

curl -O https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

tar zxf pcre-8.44.tar.gz

cd nginx-1.16.1

sed -i '' 's/CFLAGS="$CFLAGS -g"/# CFLAGS="$CFLAGS -g"/g' auto/cc/gcc

./configure --prefix=/usr/local/nginx \

--with-zlib=../zlib-1.2.11 --with-pcre=../pcre-8.44

--with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_sub_module \

--with-stream --with-stream_ssl_module --with-http_v2_module \

--with-http_mp4_module --with-http_secure_link_module --with-http_auth_request_module

make

sudo make install

发布于2020年2月16日

dd if=2020-02-05-raspbian-buster-lite.img of=/dev/sdb bs=1M

打开另一个终端,使用以下命令来查看进度

pkill -USR1 -n -x dd

发布于2020年2月12日

需要的文件:

已转换过格式的 BaseSystem.img

ESP.qcow2

qemu-system-x86_64 >= 4.2.0

UEFI 固件文件 OVMF_CODE.fd 和 OVMF_VARS-1024×768.fd

创建系统硬盘:

qemu-img create -f qcow2 system.qcow2 128G

创建虚拟机安装 MacOS 系统

qemu-system-x86_64 \

-enable-kvm \

-m 4G \

-machine q35,accel=kvm \

-smp 2 \

-cpu Penryn,vendor=GenuineIntel,kvm=on,+sse3,+sse4.2,+aes,+xsave,+avx,+xsaveopt,+xsavec,+xgetbv1,+avx2,+bmi2,+smep,+bmi1,+fma,+movbe,+invtsc \

-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc" \

-smbios type=2 \

-drive if=pflash,format=raw,readonly,file=OVMF_CODE.fd \

-drive if=pflash,format=raw,file=OVMF_VARS-1024x768.fd \

-vga virtio \

-usb -device usb-kbd -device usb-tablet \

-netdev user,id=net0 \

-device e1000-82545em,netdev=net0,id=net0,mac=52:54:00:0e:0d:25 \

-device ich9-ahci,id=sata \

-drive id=ESP,if=none,format=qcow2,file=ESP.qcow2 \

-device ide-hd,bus=sata.2,drive=ESP \

-drive id=InstallMedia,format=raw,if=none,file=BaseSystem.img \

-device ide-hd,bus=sata.3,drive=InstallMedia \

-drive id=SystemDisk,if=none,file=system.qcow2 \

-device ide-hd,bus=sata.4,drive=SystemDisk \

-vnc 0.0.0.0:0,to=99,id=default

qemu命令转换为 xml 文件

virsh domxml-from-native qemu-argv macos.args

发布于2020年2月11日

现在联通的家用宽带网络基本上都已经支持 IPV6 了,在光猫下的所有设备都可以获取一个 IPV6 的地址,如果想设置每台设备都有自定义和静态的IPV6地址,需要满足以下条件:

设备连接光猫或者路由器,可以自动获取到一个IPV6地址

在光猫或者路由器设置页面可以查询到 IPV6 地址前缀

一般在光猫的设置页面可以查询到地址前缀(联通光猫后台,状态,网络侧信息,IPv6 WAN连接信息, 获取前缀 ),比如

# IPV6 Prefix

e145:910a:2222:5400::/60

然后在路由器的设置页面可以获取到 WAN 口的 IPV6 地址和前缀,比如:

# WAN IPV6

e145:910a:2222:5400:8475:1111:3900:2020/64

# IPV6 Prefix

e145:910a:2222:5401::/64

路由器 WAN 口的 IPV6 地址来自于光猫的 DHCPV6 自动分配

我们的网络设备连接到路由器的 LAN 口上,可以获取到路由器的 DHCPV6 分配的 IPV6 地址,比如:

e145:910a:2222:5401:2583:8567:3467:3467/64

设备分配到的 IPV6 地址的前四位是 IPV6 前缀地址,后面四位是根据设备的 MAC 信息生成(或者随机生成)的主机地址,所以我们可以修改后面四位地址来实现静态 IPV6 地址。

CentOS 7 修改方法:

nmcli con mod ens3 ipv6.addresses "e145:910a:2222:5401:0000:0000:0000:0001/128" gw6 "e145:910a:2222:5401::"

nmcli con mod ens3 ipv6.method manual

e145:910a:2222:5401:0000:0000:0000:0001/128

也可以简写为

e145:910a:2222:5401::1/128

gw6 后面跟的是 IPV6 网关,需要填写的是路由器获取到的 IPV6 前缀

然后重启系统,查看新的 IP 地址

reboot

ip a

文章出处:蘑菇博客 www.mogublog.net 转载需联系作者授权

发布于2020年1月26日

wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz

tar zxf openssl-1.1.1d.tar.gz

cd openssl-1.1.1d

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl

make -j4 && make install

发布于2020年1月25日

归类为树莓派

OpenWRT 有 X86_64 的版本,可以安装在 KVM 虚拟化平台上

解压后导入到 KVM

gunzip openwrt-19.07.0-x86-64-combined-ext4.img.gz

virt-install --name=openwrt --vcpus=1 --ram=512 --os-type=linux --disk path=/kvm/disk/openwrt.img,bus=ide --autostart --network bridge=br0,model=e1000 --network bridge=br0,model=e1000 --import --noautoconsole --graphics vnc,listen=0.0.0.0,password=000000

安装完成后用 VNC 登录设置 root 用户密码和查看 IP 地址,如果是桥接网络,可以设置 lan 口自动获取IP

# /etc/config/network

config interface 'lan'

option ifname 'eth0'

option proto 'dhcp'

然后重启系统

发布于2020年1月25日

生成二次验证的临时密码,兼容谷歌验证器

function base32Decode($in)

{

$l = strlen($in);

$n = $bs = 0;

for ($i = 0; $i < $l; $i++) {

$n <<= 5;

$n += stripos('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', $in[$i]);

$bs = ($bs + 5) % 8;

$out .= $bs < 5 ? chr(($n & (255 << $bs)) >> $bs) : null;

}

return $out;

}

function getOTP($secret)

{

$seed = base32Decode($secret);

$time = str_pad(pack('N', intval(0 + time() / 30)), 8, "\x00", STR_PAD_LEFT);

$hash = hash_hmac('sha1', $time, $seed, false);

$otp = (hexdec(substr($hash, hexdec($hash[39]) * 2, 8)) & 0x7fffffff) % pow(10, 6);

return sprintf("%'06u", $otp);

}

echo getOTP('secret_key');

发布于2020年1月20日

归类为php

使用腾讯云 COS API 查看存储里的所有文件(最多1000个)

define('SecretId', 'SecretId');

define('SecretKey', 'SecretKey');

function listBucketFiles($region, $bucket)

{

$host = $bucket . '.cos.' . $region . '.myqcloud.com';

$path = '/';

$url = 'https://' . $host . $path;

$header = array(

'Authorization: ' . requestSign($host, 'GET', $path),

'Date: ' . gmdate('D, d M Y H:i:s T'),

);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);

curl_setopt($curl, CURLOPT_HTTPHEADER, $header);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($curl);

curl_close($curl);

$files = [];

$list = simplexml_load_string($response);

foreach ($list->Contents as $v) {

$files[] = (String) $v->Key;

}

return $files;

}

function requestSign($host, $method, $path)

{

$signTime = (string) (time() - 60) . ';' . (string) (time() + 1200);

$httpString = sprintf("%s\n%s\n\nhost=%s\n", strtolower($method), $path, $host);

$stringToSign = sprintf("sha1\n%s\n%s\n", $signTime, sha1($httpString));

$signKey = hash_hmac('sha1', $signTime, SecretKey);

$signature = hash_hmac('sha1', $stringToSign, $signKey);

return sprintf('q-sign-algorithm=sha1&q-ak=%s&q-sign-time=%s&q-key-time=%s&q-header-list=host&q-url-param-list=&q-signature=%s', SecretId, $signTime, $signTime, $signature);

}

发布于2020年1月19日

归类为php

一 创建 CA 证书

#!/bin/bash

mkdir CA

cd CA

openssl genrsa -out ca.key 4096

// openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C=CN/ST=Beijing/L=Beijing/O=mogu/OU=CA/CN=mogu/emailAddress=admin@mogu.com"

echo "1" > serial

# Useage: sh createCA.sh

二 签名域名

#!/bin/bash

mkdir ${1}

cd ${1}

echo "[ req ]

default_bits = 4096

distinguished_name = req_distinguished_name

req_extensions = req_ext

[ req_distinguished_name ]

countryName = Country Name (2 letter code)

countryName_default = CN

stateOrProvinceName = State or Province Name (full name)

stateOrProvinceName_default = Beijing

localityName = Locality Name (eg, city)

localityName_default = Beijing

organizationName = Organization Name (eg, company)

organizationName_default = www

organizationalUnitName = Organizational Unit Name (eg, section)

organizationalUnitName_default = IT

commonName = Common Name (e.g. server FQDN or YOUR name)

commonName_max = 64

commonName_default = ${1}

[ req_ext ]

subjectAltName = @alt_names

[alt_names]

DNS.1 = ${1}

" > san.conf

openssl genrsa -out ${1}.key 4096

openssl req -new -key ${1}.key -out ${1}.csr -config san.conf -sha256

# serial 唯一

serial=$(cat ../CA/serial)

openssl x509 -req -days 3650 -in ${1}.csr -CA ../CA/ca.crt -CAkey ../CA/ca.key -set_serial $((serial+1)) -out ${1}.crt -extfile san.conf -extensions req_ext

echo $((serial+1)) > ../CA/serial

# Useage: sh signDoamin.sh localhost

三 配置 CA 证书

# /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

发布于2019年12月20日

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值