golang 3DES 암호화
2689 단어 golang
결과가 입력 표시를 정상적으로 인쇄할 수 있도록 모두base64 처리를 거쳤다
* TripleDES.go
package auth
import (
"bytes"
"crypto/cipher"
"crypto/des"
"encoding/base64"
)
type TripleDES struct {
key string
iv string
}
// @ref: https://blog.csdn.net/xiaoxiao_haiyan/article/details/81320350
func (this *TripleDES) Encrypt(plain string) (string, error) {
key := []byte(this.key)
iv := []byte(this.iv)
block, err := des.NewTripleDESCipher(key)
if err != nil {
return "", err
}
input := []byte(plain)
// input = PKCS5Padding(input, block.BlockSize())
blockMode := cipher.NewOFB(block, iv)
crypted := make([]byte, len(input))
blockMode.XORKeyStream(crypted, input)
return base64.StdEncoding.EncodeToString(crypted), err
}
func (this *TripleDES) Decrypt(secret string) (string, error) {
key := []byte(this.key)
iv := []byte(this.iv)
crypted, err := base64.StdEncoding.DecodeString(secret)
if err != nil {
return "", err
}
block, err := des.NewTripleDESCipher(key)
if err != nil {
return "", err
}
blockMode := cipher.NewOFB(block, iv)
origData := make([]byte, len(crypted))
blockMode.XORKeyStream(origData, crypted)
// origData = PKCS5UnPadding(origData)
return string(origData), nil
}
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
padding := blockSize - len(ciphertext)%blockSize
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
return append(ciphertext, padtext...)
}
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
// unpadding
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}
* TripleDES_test.go
package auth
import (
"strings"
"testing"
)
func TestTripleDES_Encrypt(t *testing.T) {
input := "11111"
key := "\x8a\xbe\x1e\x3f..."
iv := "\x8a\xbe\x1e\x3f\xab\xb0\x90\xe8"
des := TripleDES{key: key, iv: iv}
output, err := des.Encrypt(input)
if err != nil {
t.Errorf(err.Error())
}
t.Log(output)
if output != "VMtLmys=" {
t.Fail()
}
}
func TestTripleDES_Decrypt(t *testing.T) {
input := "FY8OxXQKh4I="
key := "\x8a\xbe\x1e\x3f..."
iv := "\x8a\xbe\x1e\x3f\xab\xb0\x90\xe8"
des := TripleDES{key: key, iv: iv}
output, err := des.Decrypt(input)
if err != nil {
t.Errorf(err.Error())
}
t.Log(output)
if strings.Compare(output, "putongj3") != 0 {
t.Fail()
}
}
참고 자료:https://blog.csdn.net/xiaoxiao_haiyan/article/details/81320350
사용자 암호 해독
https://blog.csdn.net/fareast_mzh/article/details/88395311비밀 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set container
There is no built-in set container in Go
How to implement Set
struct{} => type
struct{}{} => 0bytes
How to create
set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
https://blog.csdn.net/fareast_mzh/article/details/88395311비밀 문장
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.