firefox下PT-Plugin-Plus打包并签名
发布时间:July 2, 2020 // 分类: // No Comments
安装nodejs和yarn:
curl -sL https://deb.nodesource.com/setup_12.x | bash -
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
apt update && sudo apt install yarn nodejs
打包PT-Plugin-Plus:
git clone https://github.com/ronggang/PT-Plugin-Plus.git
cd PT-Plugin-Plus/
yarn install
yarn build
打包dist目录,提交到firefox自托管附加组件签名。
cd dist
zip -q -r pt-plugin-plus.zip *
php openssl chacha20加密
发布时间:May 3, 2020 // 分类: // No Comments
ietf版chacha20 nonce为12字节,openssl_encrypt传递iv参数最低16字节,将nonce前面以\0补充到16字节。
<?php
$key = hash('sha256', "pass", true);
$nonce = random_bytes(12);
$msg = "message";
$cipher_str = openssl_encrypt($msg, 'chacha20', $key, OPENSSL_NO_PADDING, "\0\0\0\0".$nonce);
echo "cipher hex: " . bin2hex($cipher_str) . PHP_EOL;
$plain_str = openssl_decrypt($cipher_str, 'chacha20', $key, OPENSSL_NO_PADDING, "\0\0\0\0".$nonce);
echo "plain text: ".$plain_str.PHP_EOL;
golang XChaCha20/ChaCha20/XChaCha20-Poly1305/ChaCha20-Poly1305加密
发布时间:May 2, 2020 // 分类: // No Comments
ChaCha20和XChaCha20,NewUnauthenticatedCipher传入nonce值为12字节时使用ChaCha20,24字节时使用XChaCha20加密方法:
package main
import (
"crypto/sha256"
"fmt"
"io"
"crypto/rand"
//"encoding/hex"
"golang.org/x/crypto/chacha20"
)
func main() {
pass := "Hello"
msg := []byte("Pass")
//msg, _ := hex.DecodeString("e07a6838")
key := sha256.Sum256([]byte(pass))
//nonce := make([]byte, chacha20.NonceSize)
nonce := make([]byte, chacha20.NonceSizeX)
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
panic(err.Error())
}
cip, _ := chacha20.NewUnauthenticatedCipher(key[:], nonce)
ciphertext := make([]byte, len(msg))
plaintext := make([]byte, len(msg))
cip.XORKeyStream(ciphertext, msg)
cip2, _ := chacha20.NewUnauthenticatedCipher(key[:], nonce)
cip2.XORKeyStream(plaintext, ciphertext)
fmt.Printf("Message:\t%s\n", msg)
fmt.Printf("Passphrase:\t%s\n", pass)
fmt.Printf("Key:\t%x\n", key)
fmt.Printf("Nonce:\t%x\n", nonce)
fmt.Printf("Cipher stream:\t%x\n", ciphertext)
fmt.Printf("Plain text:\t%s\n", plaintext)
}
XChaCha20-Poly1305和ChaCha20-Poly1305加密,分别调用NewX和New初始化,nonce同上ChaCha20和XChaCha20的大小。
package main
import (
"crypto/rand"
"crypto/sha256"
"fmt"
"golang.org/x/crypto/chacha20poly1305"
"io"
)
func main() {
pass := "Hello"
msg := "Pass"
key := sha256.Sum256([]byte(pass))
//aead, _ := chacha20poly1305.NewX(key[:])
aead, _ := chacha20poly1305.New(key[:])
//nonce := make([]byte, chacha20poly1305.NonceSizeX)
nonce := make([]byte, chacha20poly1305.NonceSize)
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
panic(err.Error())
}
ciphertext := aead.Seal(nil, nonce, []byte(msg), nil)
plaintext, _ := aead.Open(nil, nonce, ciphertext, nil)
fmt.Printf("Message:\t%s\n", msg)
fmt.Printf("Passphrase:\t%s\n", pass)
fmt.Printf("Key:\t%x\n", key)
fmt.Printf("Nonce:\t%x\n", nonce)
fmt.Printf("Cipher stream:\t%x\n", ciphertext)
fmt.Printf("Plain text:\t%s\n", plaintext)
}
golang/php使用aes加密文件
发布时间:April 28, 2020 // 分类:PHP // 1 Comment
兼容于golang语言版本:https://github.com/eliben/code-for-blog/blob/master/2019/aes-encrypt-file/aes-file.go
使用aes-256-cbc加密,加密文件前8字节为原始文件大小数字,跟着是16字节随机字节用作iv,再跟着是先补全的明文加密内容。
<?php
function decrypt($key, $infilename, $outfilename = "") {
if (!$outfilename) {
$outfilename = $infilename.'.dec';
}
$cipher_str = file_get_contents($infilename);
if (!$cipher_str) {
die("empty file".PHP_EOL);
}
$file_size = substr($cipher_str, 0, 8);
$file_size = unpack("P", $file_size);
$iv = substr($cipher_str, 8, 16);
$cipher_str = substr($cipher_str, 24);
$plain_str = openssl_decrypt($cipher_str, "aes-256-cbc", $key, 3, $iv);
$plain_str = substr($plain_str, 0, $file_size[1]);
file_put_contents($outfilename, $plain_str);
echo "decrypted output file ".$outfilename.PHP_EOL;
}
function encrypt($key, $infilename, $outfilename) {
if (!$outfilename) {
$outfilename = $infilename.'.enc';
}
$plain_str = file_get_contents($infilename);
if (!$plain_str) {
die("empty file".PHP_EOL);
}
$file_size = strlen($plain_str);
$file_size = pack("P", $file_size);
$iv = random_bytes(16);
if (strlen($plain_str) % 16 != 0) {
$bytesToPad = 16 - (strlen($plain_str) % 16);
$plain_str = $plain_str . random_bytes($bytesToPad);
}
$cipher_str = openssl_encrypt($plain_str, "aes-256-cbc", $key, 3, $iv);
$cipher_str = $file_size.$iv.$cipher_str;
file_put_contents($outfilename, $cipher_str);
echo "encrypted output file ".$outfilename.PHP_EOL;
}
$arg = getopt('e::d::k:i:o:');
if (isset($arg['i']) && !empty($arg['i'])) {
$infilename = $arg['i'];
} else {
die("please input filename".PHP_EOL);
}
if (isset($arg['o']) && !empty($arg['o'])) {
$outfilename = $arg['o'];
} else {
$outfilename = "";
}
if (isset($arg['k']) && !empty($arg['k'])) {
$key = $arg['k'];
} else {
$key = "pass";
}
$key = hash('sha256', $key, true);
if (isset($arg['d'])) {
decrypt($key, $infilename, $outfilename);
} elseif (isset($arg['e'])) {
encrypt($key, $infilename, $outfilename);
}
golang cbc使用pkcs7补全版:
package main
import (
"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"crypto/sha256"
//"encoding/binary"
"flag"
"fmt"
"io/ioutil"
"log"
"os"
)
func pkcs7strip(data *[]byte, blockSize int) (int, error) {
length := len(*data)
if length == 0 {
return 0, fmt.Errorf("pkcs7: Data is empty")
}
if length%blockSize != 0 {
return 0, fmt.Errorf("pkcs7: Data is not block-aligned")
}
padLen := int((*data)[length-1])
ref := bytes.Repeat([]byte{byte(padLen)}, padLen)
if padLen > blockSize || padLen == 0 || !bytes.HasSuffix(*data, ref) {
return 0, fmt.Errorf("pkcs7: Invalid padding")
}
return length-padLen, nil
}
func pkcs7pad(data *[]byte, blockSize int) error {
if blockSize < 0 || blockSize > 256 {
return fmt.Errorf("pkcs7: Invalid block size %d", blockSize)
} else {
padLen := blockSize - len(*data) % blockSize
padding := bytes.Repeat([]byte{byte(padLen)}, padLen)
*data = append(*data, padding...)
return nil
}
}
func encryptFile(key []byte, filename string, outFilename string) (string, error) {
if len(outFilename) == 0 {
outFilename = filename + ".enc"
}
plaintext, err := ioutil.ReadFile(filename)
if err != nil {
return "", err
}
of, err := os.Create(outFilename)
if err != nil {
return "", err
}
defer of.Close()
if err := pkcs7pad(&plaintext, aes.BlockSize) ; err != nil {
return "", err
}
iv := make([]byte, aes.BlockSize)
if _, err := rand.Read(iv); err != nil {
return "", err
}
if _, err = of.Write(iv); err != nil {
return "", err
}
ciphertext := make([]byte, len(plaintext))
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
mode := cipher.NewCBCEncrypter(block, iv)
mode.CryptBlocks(ciphertext, plaintext)
if _, err = of.Write(ciphertext); err != nil {
return "", err
}
return outFilename, nil
}
func decryptFile(key []byte, filename string, outFilename string) (string, error) {
if len(outFilename) == 0 {
outFilename = filename + ".dec"
}
ciphertext, err := ioutil.ReadFile(filename)
if err != nil {
return "", err
}
of, err := os.Create(outFilename)
if err != nil {
return "", err
}
defer of.Close()
buf := bytes.NewReader(ciphertext)
iv := make([]byte, aes.BlockSize)
if _, err = buf.Read(iv); err != nil {
return "", err
}
paddedSize := len(ciphertext) - aes.BlockSize
if paddedSize%aes.BlockSize != 0 {
return "", fmt.Errorf("want padded plaintext size to be aligned to block size")
}
plaintext := make([]byte, paddedSize)
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
mode := cipher.NewCBCDecrypter(block, iv)
mode.CryptBlocks(plaintext, ciphertext[aes.BlockSize:])
origSize, err := pkcs7strip(&plaintext, aes.BlockSize)
if err != nil {
return "", err
}
if _, err := of.Write(plaintext[:origSize]); err != nil {
return "", err
}
return outFilename, nil
}
func main() {
var keyFlag string
encFlag := flag.Bool("e", false, "encrypt")
decFlag := flag.Bool("d", false, "decrypt")
flag.StringVar(&keyFlag, "k", "password", "encrypt password")
flag.Parse()
filename := flag.Arg(0)
key := sha256.Sum256([]byte(keyFlag))
fmt.Println("use password", keyFlag)
//fmt.Println(key)
if *encFlag {
outFilename, err := encryptFile(key[:], filename, "")
if err != nil {
log.Fatal(err)
}
fmt.Println("Encrypted output file:", outFilename)
} else if *decFlag {
outFilename, err := decryptFile(key[:], filename, "")
if err != nil {
log.Fatal(err)
}
fmt.Println("Decrypted output file:", outFilename)
} else {
fmt.Println(flag.Usage)
os.Exit(1)
}
}
golang使用aes cfb:
package main
import (
//"bytes"
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"crypto/sha256"
//"encoding/binary"
"flag"
"fmt"
"io"
"io/ioutil"
"log"
"os"
)
func encryptFile(key []byte, filename string, outFilename string) (string, error) {
if len(outFilename) == 0 {
outFilename = filename + ".enc"
}
plaintext, err := ioutil.ReadFile(filename)
if err != nil {
return "", err
}
of, err := os.Create(outFilename)
if err != nil {
return "", err
}
defer of.Close()
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
panic(err)
}
stream := cipher.NewCFBEncrypter(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
fmt.Printf("iv:\t%x\n", iv)
fmt.Printf("cipher text:\t%x\n", ciphertext)
if _, err = of.Write(ciphertext); err != nil {
return "", err
}
return outFilename, nil
}
func decryptFile(key []byte, filename string, outFilename string) (string, error) {
if len(outFilename) == 0 {
outFilename = filename + ".dec"
}
ciphertext, err := ioutil.ReadFile(filename)
fmt.Printf("cipher text:\t%x\n", ciphertext)
if err != nil {
return "", err
}
of, err := os.Create(outFilename)
if err != nil {
return "", err
}
defer of.Close()
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
iv := ciphertext[:aes.BlockSize]
ciphertext = ciphertext[aes.BlockSize:]
fmt.Printf("cipher2 text:\t%x\n", ciphertext)
fmt.Printf("iv:\t%x\n", iv)
stream := cipher.NewCFBDecrypter(block, iv)
stream.XORKeyStream(ciphertext, ciphertext)
if _, err := of.Write(ciphertext); err != nil {
return "", err
}
return outFilename, nil
}
func main() {
var keyFlag string
encFlag := flag.Bool("e", false, "encrypt")
decFlag := flag.Bool("d", false, "decrypt")
flag.StringVar(&keyFlag, "k", "password", "encrypt password")
flag.Parse()
filename := flag.Arg(0)
key := sha256.Sum256([]byte(keyFlag))
fmt.Println("use password", keyFlag)
//fmt.Println(key)
if *encFlag {
outFilename, err := encryptFile(key[:], filename, "")
if err != nil {
log.Fatal(err)
}
fmt.Println("Encrypted output file:", outFilename)
} else if *decFlag {
outFilename, err := decryptFile(key[:], filename, "")
if err != nil {
log.Fatal(err)
}
fmt.Println("Decrypted output file:", outFilename)
} else {
fmt.Println(flag.Usage)
os.Exit(1)
}
}
分类
- Apache (13)
- Nginx (45)
- PHP (86)
- IIS (8)
- Mail (17)
- DNS (16)
- Cacti (14)
- Squid (5)
- Nagios (4)
- Puppet (7)
- CentOS (13)
- Iptables (23)
- RADIUS (3)
- OpenWrt (41)
- DD-WRT (1)
- VMware (9)
- 网站程序 (2)
- 备份存储 (11)
- 常用软件 (20)
- 日记分析 (10)
- Linux基础 (18)
- 欧诺代理 (0)
- Linux服务 (18)
- 系统监控 (4)
- 流量监控 (7)
- 虚拟化 (28)
- 伪静态 (2)
- LVM (3)
- Shell (18)
- 高可用 (2)
- 数据库 (16)
- FreeBSD (3)
- 网络安全 (25)
- Windows (35)
- 网络工具 (22)
- 控制面板 (3)
- 系统调优 (10)
- Cisco (3)
- VPN (6)
- ROS (20)
- Vim (14)
- KMS (4)
- PXE (2)
- Mac (1)
- Git (1)
- PE (1)
- LNS (2)
- Xshell (7)
- Firefox (13)
- Cygwin (4)
- OpenSSL (9)
- Sandboxie (3)
- StrokesPlus (1)
- AutoHotKey (4)
- Total Commander (3)
- WordPress (3)
- iMacros (6)
- Typecho (2)
- Ollydbg (1)
- Photoshop (1)
- 正则 (3)
- Debian (3)
- Python (8)
- NoSQL (6)
- 消息队列 (4)
- JS (7)
- Tmux (3)
- GO (7)
- HHVM (2)
- 算法 (1)
- Docker (2)
- PT (15)
- N1 (16)
- K2P (6)
- LUKS (4)
最新文章
- sandboxie plus运行firefox 140播放视频全屏不能覆盖任务栏
- TEWA-1100G光猫使用
- 烽火光猫HG5382A3使用
- 记联通更换移动XG-040G-MD光猫
- smokeping slave同步错误illegal attempt to update using time解决
- 使用valgrind定位解决smartdns内存泄露
- 此内容被密码保护
- debian12下initramfs-tools配置ip子网掩码255.255.255.255/32失败解决
- iPhone查看屏幕供应商
- 光猫拨号ImmortalWrt/OpenWRT路由获取ipv6遇到的问题
最近回复
- 海运: 可能版本问题
- 海运: 如果运营商限制型号
- 海运: 没有
- Mruru: 烽火猫切换rootfs的方法有么大佬?
- nono: 修改光猫型号是做啥子用的
- 960: root账号默认密码hg2x0 不对哇
- rer: 感谢分享!~
- opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
- liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
- 海运: 不好意思,没有。
归档
- August 2025
- March 2025
- February 2025
- August 2024
- May 2024
- February 2024
- January 2024
- December 2023
- November 2023
- October 2023
- September 2023
- August 2023
- May 2023
- April 2023
- February 2023
- January 2023
- December 2022
- September 2022
- July 2022
- April 2022
- March 2022
- February 2022
- January 2022
- December 2021
- November 2021
- April 2021
- March 2021
- February 2021
- January 2021
- December 2020
- November 2020
- October 2020
- September 2020
- July 2020
- May 2020
- April 2020
- March 2020
- February 2020
- January 2020
- December 2019
- November 2019
- July 2019
- April 2019
- March 2019
- February 2019
- January 2019
- December 2018
- November 2018
- October 2018
- September 2018
- August 2018
- July 2018
- June 2018
- April 2018
- March 2018
- February 2018
- January 2018
- December 2017
- October 2017
- September 2017
- August 2017
- July 2017
- April 2017
- March 2017
- February 2017
- January 2017
- December 2016
- November 2016
- July 2016
- June 2016
- November 2015
- October 2015
- September 2015
- August 2015
- July 2015
- June 2015
- May 2015
- April 2015
- March 2015
- February 2015
- January 2015
- December 2014
- November 2014
- October 2014
- September 2014
- August 2014
- July 2014
- June 2014
- May 2014
- April 2014
- March 2014
- February 2014
- January 2014
- December 2013
- November 2013
- October 2013
- August 2013
- July 2013
- June 2013
- May 2013
- April 2013
- March 2013
- February 2013
- January 2013
- December 2012
- November 2012
- October 2012
- September 2012
- August 2012
- July 2012
- June 2012
- May 2012
- April 2012
- March 2012
- February 2012
- October 2011
- September 2011
- August 2011
- July 2011