Code Monkey home page Code Monkey logo

goencrypt's Introduction

goEncrypt

go语言封装的各种对称加密和非对称加密,可以直接使用,包括3重DES,AES的CBC和CTR模式,还有RSA非对称加密

下载到本地可以直接调用

使用方法

go get github.com/wumansgy/goEncrypt

然后下载到本地可以直接调用,包括了DES的CBC模式的加密解密(虽然DES早就被破解,但是可以参考使用),三重DES的加密解密(可以使用),AES的CBC模式和CTR模式(对称加密中常用的加密算法),非对称加密RSA的加密解密(比较常用的非对称加密算法),椭圆曲线加密算法(后面更新),还有哈希函数sha256,sha512的快速使用(MD5,SHA1已经在2004,2005年被陆续攻破,现在常用sha256和sha512)

1.1DES的快速使用

// des
func main() {
	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	desSecretKey := "12345678"
	base64Text, err := des.DesCbcEncryptBase64([]byte(msg), []byte(desSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("DES模式加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := des.DesCbcDecryptByBase64(base64Text, []byte(desSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("DES模式解密后:\n%s\n", string(plaintext))

	/*DES模式加密后的base64密文为:
	kzott0GFh9Rg0rsg1X2RP/F4YQ0tOBe6NfKjmAqiDfUrgqcw1P8Dix6IWe07DS2kJ7RZinPynHyiG+xB3NTajXBog4ayohan
	DES模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexText, err := des.DesCbcEncryptHex([]byte(msg), []byte(desSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("DES模式加密后的hex密文为:\n%s\n", hexText)
	plaintext, err = des.DesCbcDecryptByHex(hexText, []byte(desSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("DES模式解密后:\n%s\n", string(plaintext))

	/*DES模式加密后的hex密文为:
	933a2db7418587d460d2bb20d57d913ff178610d2d3817ba35f2a3980aa20df52b82a730d4ff038b1e8859ed3b0d2da427b4598a73f29c7ca21bec41dcd4da8d70688386b2a216a7
	DES模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/
}

1.2三重DES的快速使用

// triple_des
func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	tripleDesSecretKey := "123456781234567812345678"
	base64Text, err := des.TripleDesEncryptBase64([]byte(msg), []byte(tripleDesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("三重DES模式加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := des.TripleDesDecryptByBase64(base64Text, []byte(tripleDesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("三重DES模式解密后:\n%s\n", string(plaintext))

	/*三重DES模式加密后的base64密文为:
	kzott0GFh9Rg0rsg1X2RP/F4YQ0tOBe6NfKjmAqiDfUrgqcw1P8Dix6IWe07DS2kJ7RZinPynHyiG+xB3NTajXBog4ayohan
	三重DES模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexText, err := des.TripleDesEncryptHex([]byte(msg), []byte(tripleDesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("三重DES模式加密后的hex密文为:\n%s\n", hexText)
	plaintext, err = des.TripleDesDecryptByHex(hexText, []byte(tripleDesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("三重DES模式解密后:\n%s\n", string(plaintext))

	/*三重DES模式加密后的hex密文为:
	933a2db7418587d460d2bb20d57d913ff178610d2d3817ba35f2a3980aa20df52b82a730d4ff038b1e8859ed3b0d2da427b4598a73f29c7ca21bec41dcd4da8d70688386b2a216a7
	三重DES模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/
}

2.1AES的CBC模式的快速使用

func main() {
	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	aesSecretKey := "1234567812345678"
	base64Text, err := aes.AesCbcEncryptBase64([]byte(msg), []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CBC模式加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := aes.AesCbcDecryptByBase64(base64Text, []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CBC模式解密后:\n%s\n", string(plaintext))

	/*AES的CBC模式加密后的base64密文为:
	Y8uCrLL8SavXyiUzpnU+Lmn4mODprYL/odSK3MVmGlseuftpJ6A6szrGl/bfDK18z+EkD7TXNI4WemUdvbHZCtSQ1OwexzDtDWcFETU2Ml8=
	AES的CBC模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexText, err := aes.AesCbcEncryptHex([]byte(msg), []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CBC模式加密后的hex密文为:\n%s\n", hexText)
	plaintext, err = aes.AesCbcDecryptByHex(hexText, []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CBC模式解密后:\n%s\n", string(plaintext))

	/*AES的CBC模式加密后的hex密文为:
	63cb82acb2fc49abd7ca2533a6753e2e69f898e0e9ad82ffa1d48adcc5661a5b1eb9fb6927a03ab33ac697f6df0cad7ccfe124067a651dbdb1d90ad490d4ec1ec730ed0d6705113536325f
	AES的CBC模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/
}

2.2AES的CTR模式的快速使用

func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	aesSecretKey := "1234567812345678"
	base64Text, err := aes.AesCtrEncryptBase64([]byte(msg), []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CTR模式加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := aes.AesCtrDecryptByBase64(base64Text, []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CTR模式解密后:\n%s\n", string(plaintext))

	/*AES的CTR模式加密后的base64密文为:
	PzO1cjrO1q1PZeJEPw/fDM/TmZ2r4V+yao+MkDVTvR6pdlxdbFhzs1LF6rrZhUgC257ZQbofd0NTJFUUDwsc6rCcEL50
	AES的CTR模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexText, err := aes.AesCtrEncryptHex([]byte(msg), []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CTR模式加密后的hex密文为:\n%s\n", hexText)
	plaintext, err = aes.AesCtrDecryptByHex(hexText, []byte(aesSecretKey), nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的CTR模式解密后:\n%s\n", string(plaintext))

	/*AES的CTR模式加密后的hex密文为:
	3f33b5723aced6ad4f65e2443f0fdf0ccfd3999dabe15fb26a8f8c903553bd1ea9765c5d6c5873b352c5eabad9854802db9ed941ba1f7743532455140f0b1ceab09c10be74
	AES的CTR模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

}

2.3AES的ECB模式的快速使用-不推荐

func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	aesSecretKey := "1234567812345678"
	base64Text, err := aes.AesEcbEncryptBase64([]byte(msg), []byte(aesSecretKey))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的ECB模式加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := aes.AesEcbDecryptByBase64(base64Text, []byte(aesSecretKey))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的ECB模式解密后:\n%s\n", string(plaintext))

	/*AES的ECB模式加密后的base64密文为:
	piizmMYegn4S5xLmEPEdcixb4gmyq1OpncCkUzWU21kXe6N7SHjvbf5zvmeQ3FH2ZFEb2J21FTNpzVpHGaBNP7wr+6xw7Ucu3vTiAuzaIew=
	AES的ECB模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexText, err := aes.AesEcbEncryptHex([]byte(msg), []byte(aesSecretKey))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的ECB模式加密后的hex密文为:\n%s\n", hexText)
	plaintext, err = aes.AesEcbDecryptByHex(hexText, []byte(aesSecretKey))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("AES的ECB模式解密后:\n%s\n", string(plaintext))

	/*AES的ECB模式加密后的hex密文为:
	a628b398c61e827e12e712e610f11d722c5be209b2ab53a99dc0a4533594db59177ba37b4878ef6dfe73be6790dc51f664511bd89db5153369cd5a4719a04d3fbc2bfbac70ed472edef4e202ecda21ec
	AES的ECB模式解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/
}

3. 非对称加密RSA的快速使用

非对称加密需要先生成一对公钥和私钥,公钥和私钥是成对出现的,公钥加密只能私钥解密,私钥签名只能公钥验签,(加密都是使用私钥加密,公钥解密,数字签名就是使用私钥签名消息的哈希,然后公钥验证签名)

3.1 使用

func main() {
	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	rsaBase64Key, err := rsa.GenerateRsaKeyBase64(1024)
	if err != nil {
		fmt.Println(err)
		return
	}
	base64Text, err := rsa.RsaEncryptToBase64([]byte(msg), rsaBase64Key.PublicKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := rsa.RsaDecryptByBase64(base64Text, rsaBase64Key.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa解密后:\n%s\n", string(plaintext))

	/*rsa加密后的base64密文为:
	seAZe5Bojdp58eIf9hh5jf8PiIREr19IOXTc+re4z5crNR29mmXM6UFq5Uc1S53QLggL1+3nVNkA8AUnrw8jr4BM+oSqIvGqa92STz2XKcF7ukjTIakirWkOMRz3/dl8VIIucuJHedH7AOGtN1zhKVQbL3lejwq03J6cLEvz4WE=
	rsa解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	base64Sign, err := rsa.RsaSignBase64([]byte(msg), rsaBase64Key.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa签名的base64为:\n%s\n", base64Sign)
	res := rsa.RsaVerifySignBase64([]byte(msg), base64Sign, rsaBase64Key.PublicKey)
	fmt.Printf("rsa验签结果为:\n%v\n", res)

	/*rsa签名的base64为:
	cxe5nwMJB5dJwdvAmk7DPKSw46lL8mkwdhauwEWUXbcxKhh5EQN+ed/YTvTZh/yoWIQMKRqOlPszd6AnKA48Cy7Z5rfjj8rPobmYwGJzCkIWCCISZcaKYN5MOgLwRhyHSRwEwUcb3ZUdlj0QgCZHwleNq++FTtfTDwa9JuwWlSo=
	rsa验签结果为:
	true*/
}
func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	rsaHexKey, err := rsa.GenerateRsaKeyHex(1024)
	if err != nil {
		fmt.Println(err)
		return
	}
	HexText, err := rsa.RsaEncryptToHex([]byte(msg), rsaHexKey.PublicKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa加密后的Hex密文为:\n%s\n", HexText)
	plaintext, err := rsa.RsaDecryptByHex(HexText, rsaHexKey.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa解密后:\n%s\n", string(plaintext))

	/*rsa加密后的Hex密文为:
	7ff6e0cb36bbb537ffdb142344cf3383a2878253b4123845a16d048c1c22ec5f5e474f6ae3dea15b7d791ded3d34379ccdd452dfd11a21ddd4b35864d97f46798396baeb404b7e0f85239f81f1ed6d7c5b69b5ca7e1590413b7332557f5e02333210c18ad0863f606ff4473cfa70fdfda12ea0f7e8559e304686bda7016a695c
	rsa解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	hexSign, err := rsa.RsaSignHex([]byte(msg), rsaHexKey.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("rsa签名的hex为:\n%s\n", hexSign)
	res := rsa.RsaVerifySignHex([]byte(msg), hexSign, rsaHexKey.PublicKey)
	fmt.Printf("rsa验签结果为:\n%v\n", res)

	/*rsa签名的hex为:
	48b2232ac4183ece8aa2f60393d27befff1e38a4d124cff97daa5877cd30d426ce8d78a2f13bab49e1964a340a35a8c90c8c0cca483ae2bba45e68523d32f0427d3c4f82c812fe79dc65d3729a6f9c45161ae00da955954e8d1b2e16a930d567fbe9fb3232e3c115d278e57397d073f0b8181f44ade76ce6bf548178d29bbf32
	rsa验签结果为:
	true
	*/
}

RSA在非对称加密中使用比较广泛

4.ECC椭圆曲线应用

(GO里面只有ECC数字签名的接口,所以我们这里实现了ECC的数字签名功能,ECC椭圆曲线加密使用了区块链以太坊中的相关接口,ECC一般只签名使用加密一般不使用)

4.1 ECC使用

func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	eccBase64Key, err := ecc.GenerateEccKeyBase64()
	if err != nil {
		fmt.Println(err)
		return
	}
	base64Text, err := ecc.EccEncryptToBase64([]byte(msg), eccBase64Key.PublicKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc加密后的base64密文为:\n%s\n", base64Text)
	plaintext, err := ecc.EccDecryptByBase64(base64Text, eccBase64Key.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc解密后:\n%s\n", string(plaintext))

	/*ecc加密后的base64密文为:
	BAeEe7isXcDruhexWZixs0DqDJT4GUGEp9666ssgtgyixWpE4kxB/RsUbuFGR/eMA7ix+xJ9jet2glQVxUtPzRrLdmW6a31Dya0/bCb3WqpOsrGuC5MaZ3y6z0xkAbw1LGBVms6Ig/56JseK7jbOPCegvtgAO+5kESpjqptX6C/VynGyqEYDj/8PU0UnBwS2TFeAyG5rmwy1Z5P+kmbfNNfaIvKX4yODvJT4BdhATg9tUDkDDXw=
	ecc解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	rSign, sSign, err := ecc.EccSignBase64([]byte(msg), eccBase64Key.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc签名的为:\nrSign=%s\nsSign=%s\n", rSign, sSign)
	res := ecc.EccVerifySignBase64([]byte(msg), rSign, sSign, eccBase64Key.PublicKey)
	fmt.Printf("ecc验签结果为:\n%v\n", res)

	/*ecc签名的为:
	rSign=MzA3NTQyOTA4NzE0MzY1Nzg4MzU0OTkxNzk0NDIxODcyMTk4NjY0NzY5NzgzNDI5MjYxMjUwMTUxNjE1MzYzODM5MDI0ODMyNDg0MDU=
	sSign=MTUxMjc1NDAyMTY5NDE1NjY3MDU2ODU2ODk4MjcxNjcxMDMwNzAwODMyMjUwMjUwMTQ3MTU3NDY3NjgyNTEyODE2NDA5NzYwNTYxODQ=
	ecc验签结果为:
	true
	*/
}
func main() {

	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	eccHexKey, err := ecc.GenerateEccKeyHex()
	if err != nil {
		fmt.Println(err)
		return
	}
	hexText, err := ecc.EccEncryptToHex([]byte(msg), eccHexKey.PublicKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc加密后的hex密文为:\n%s\n", hexText)
	plaintext, err := ecc.EccDecryptByHex(hexText, eccHexKey.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc解密后:\n%s\n", string(plaintext))

	/*ecc加密后的hex密文为:
	04689a2f57eee52e36d16fa8628353cdb8a13f2686597f6d6b45d1bcc0d4cd75be09562d9ff565879cb333ef16b3c21e2411035d8aaaaf7e2dedc1803a879ca1382d40202aa7122365d71091a4d0683c36fa291f6b1d4ef4b30359cd7bd9c3ae875dc20f2c5e0d33121f01768373ac8b8cecff84511b76331510982753787e38da9ccd6f9f78f46641882cfe08e81db8a7cc1bf9213a63824b3d6d8dddeeaee448cfa0990e1a85c628e23eb2b9b37628b10efcc27c4c
	ecc解密后:
	床前明月光,疑是地上霜,举头望明月,低头思故乡*/

	rSign, sSign, err := ecc.EccSignHex([]byte(msg), eccHexKey.PrivateKey)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Printf("ecc签名的为:\nrSign=%s\nsSign=%s\n", rSign, sSign)
	res := ecc.EccVerifySignHex([]byte(msg), rSign, sSign, eccHexKey.PublicKey)
	fmt.Printf("ecc验签结果为:\n%v\n", res)

	/*ecc签名的为:
	rSign=35333235363338393635343330383234313231383931333332313533373634353032373036323933363630343834303735383739313330343130353033383139333235373530363834323337
	sSign=3533383435343038323339303534363136303332373435323435353130343139313530393637383432373237333735323038333836353934343135343638363231383335383831373838323632
	ecc验签结果为:
	true

	*/
}

5.sha256和sha512 hmac

func main() {
	msg := "床前明月光,疑是地上霜,举头望明月,低头思故乡"
	fmt.Println(hash.Sha1Hex([]byte(msg)))
	fmt.Println(hash.Sha256Hex([]byte(msg)))
	fmt.Println(hash.Sha512Hex([]byte(msg)))

	// d2f1f816e0d40a1eb3f8aa60001f70a5b4ac21c4
	// 0f721dc0f0b9697a060c5541a389a7e5560e7b9a2dd3eca7f7688e477eee0243
	// f81bc5e4f057c28102adf27d31a98c5af8f259b213235225dce3b75815a4b76dccd0b181c7cb5347e118ab89b62542236d317dce584ce18c7c4a3c7f63fdaa52

	fmt.Println(hash.HmacSha256Hex([]byte("key"),msg))
	fmt.Println(hash.HmacSha512Hex([]byte("key"),msg))

	// e95c72fcfdd336559e6512198bc7b5d4f2c7c6ad2ece0f9e664548a809268904
	// 42603a67b53a572cdd6d8d4b8310ca8478391b4676822b66ccc473bf8d989b8f2d7afac8c75e7f7e9e723d2c8fbd7c575d897d6aba272dbfaaf903dfb750b323
}
}

goencrypt's People

Contributors

wumansgy avatar yohox avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

goencrypt's Issues

runtime err: runtime error: invalid memory address or nil pointer dereference Check that the key is correct

runtime err: runtime error: invalid memory address or nil pointer dereference Check that the key is correct

cryptText,_:=goEncrypt.RsaEncrypt([]byte("aaa"),[]byte{ 48, 129, 159, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 1, 5, 0, 3, 129, 141, 0, 48, 129, 137, 2, 129, 129, 0, 193, 227, 147, 77, 22, 20, 70, 91, 51, 5, 62, 127, 72, 238, 78, 200, 123, 20, 185, 94, 248, 137, 71, 113, 61, 37, 238, 203, 255, 126, 116, 199, 151, 125, 2, 220, 29, 148, 81, 247, 157, 213, 209, 193, 12, 41, 172, 182, 169, 180, 214, 251, 125, 10, 2, 121, 182, 113, 158, 23, 114, 86, 95, 9, 175, 98, 119, 21, 145, 146, 33, 174, 249, 24, 153, 202, 224, 140, 13, 104, 109, 116, 139, 32, 163, 96, 59, 226, 49, 140, 166, 188, 43, 89, 112, 101, 146, 169, 33, 157, 11, 240, 92, 159, 101, 2, 58, 33, 210, 51, 8, 7, 37, 42, 224, 6, 109, 89, 206, 239, 165, 242, 116, 142, 168, 11, 171, 129, 2, 3, 1, 0, 1 })
fmt.Println(cryptText)

关于椭圆曲线加密算法的计算问题

大佬,可能是一个非常简单且愚蠢的问题:既然椭圆曲线上代数计算满足结合律,那么是否可以用快速幂算法(时间复杂度是对数级别的)来计算某个大数k对应的值?反过来,在知道kP和P的前提下,要反推k,无法使用快速幂算法,没有比挨个尝试更快的方法了(几乎是不可能的),不知道我理解的对吗?

ivdes问题

你好,可以做一个iv的接口吗 ,里面的iv写死了,

sha256和sha512问题

你好,以下这些函数是否未实现啊?
goEncrypt.GetFileStringHash256
goEncrypt.GetStringHash256
goEncrypt.GetFileStringHash512
goEncrypt.GetStringHash512
goEncrypt.GetFileHash256
goEncrypt.GetFileHash512
goEncrypt.GetHash256
goEncrypt.GetHash512

AES 256 CBC 加密出来的内容不一样

通过这个网站在线加密出来的内容如下
图片
图片
AES的CBC模式加密后的密文为: ca50cdf49d7be7153286c34f6a4a678a10c41dd2c635989832b034df559cb74b76bc5e9ab6055a19efcd8afe58b27f528c078c4006c27d2f1cf7fab4be3bae641b2ede777ec15cd62bc8de96cf8a16293358f91f3dcf27bdae91dfd307fc0cc0a2c71fc198bf12be64166ef9c2f3309ef839ca6f0571882b7d77260d295beab2c9ce39382e1b2b3d3ed8f017093c6369c0ded230fe2a8c26d348ddb0f7162e05

两个加密出来不一样,能请问这是什么原因?

报错

报错
error: crypto/cipher: input not full blocks

AES: 兼容crypto-js

你好, 请问要不要考虑兼容 https://github.com/brix/crypto-js 中的 AES 加解密?

官方示例:

var CryptoJS = require("crypto-js");

// Encrypt
var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();
//                              注意, 加解密都没有指定 iv (iv是可选参数)^
//                           key的长度不必是 16/24/32 ^

// Decrypt
var bytes  = CryptoJS.AES.decrypt(ciphertext, 'secret key 123');
var originalText = bytes.toString(CryptoJS.enc.Utf8);

console.log(originalText);

跟pkg.go.dev上默认版本号的代码对不上

直接go get的代码比github上的少了很多,是不是手动改过版本号o
像 aes.AesCtrEncryptBase64 这类方法都没有

得这样才能拉到最新的代码
go get github.com/wumansgy/goEncrypt@master

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.