Golang PHP zlib (php)加密<=>解密(go).

2018/11/08 zlib golang php

这个问题是来自一个群友的,一开始马虎大意 后来解决问题。

s

Golang 代码

package main

import (
	"bytes"
	"compress/zlib"
	"encoding/base64"
	"fmt"
	"io"
)
//进行zlib压缩
func DoZlibCompress(src []byte) []byte {
	var in bytes.Buffer
	w, _ := zlib.NewWriterLevelDict(&in,-1,src)
	w.Write(src)
	w.Close()
	return in.Bytes()
}

func DoZlibCompress2(src []byte) []byte {
	var bufs bytes.Buffer
	w, _ := zlib.NewWriterLevel(&bufs, -1)
	w.Write(src)
	defer w.Flush()
		w.Close()
	return bufs.Bytes()
}

//进行zlib解压缩
func DoZlibUnCompress(compressSrc []byte) []byte {
	b := bytes.NewReader(compressSrc)
	var out bytes.Buffer
	r, _ := zlib.NewReader(b)
	io.Copy(&out, r)
	return out.Bytes()
}

func main() {
	//buff, _ := base64.StdEncoding.DecodeString("eJxLTEoGAAJNASc=")
	buff, _ := base64.StdEncoding.DecodeString("eJxKTEoGBAAA//8CTQEn")
	fmt.Println(string(DoZlibUnCompress(buff)))



	//zip := DoZlibCompress([]byte("abc"))
	zip := DoZlibCompress2([]byte("abc"))
	fmt.Println(zip)

	fmt.Println(base64.StdEncoding.EncodeToString(zip))

	//
	//fmt.Println(string(DoZlibUnCompress(zip)))
}

...
abc
[120 156 74 76 74 6 4 0 0 255 255 2 77 1 39]
eJxKTEoGBAAA//8CTQEn

PHP 代码


<?php

$code =zlib_encode("abc",ZLIB_ENCODING_DEFLATE);
$code = base64_encode($code);
echo  "$code";
// eJxLTEoGAAJNASc=

$code = bin2hex($code);
echo  "$code";
// 654a784c54456f4741414a4e4153633d

?>

疑问

  • 为什么种方式加密的hex 不一致解析的结果却是一致的。
  • Golang 是对Zlib 进行了哪些优化?

测试地址。> http://www.txtwizard.net/compression

https://stackoverflow.com/questions/40893411/golang-python-zlib-difference

https://stackoverflow.com/questions/52767214/compressed-output-differs-from-go-to-ruby-implementation

转载请注明出处,本文采用 CC4.0 协议授权

Affiliate

Search

    Post Directory