golang - Golang, encrypting a string with AES and Base64 암호화, 복호화
이 름 : 바다아이
|
조회수 : 10955
짧은 주소 : https://www.bada-ie.com/su/?471591822818
주의 하실 점은 key 값의 길이는 정해져 있습니다. 짧아도 안되고 길어도 안되욤...
package main
import (
"crypto/aes""crypto/cipher""crypto/rand""encoding/base64""errors""fmt""io""log"
)
funcmain() {
key := []byte("a very very very very secret key") // 32 bytes
plaintext := []byte("some really really really long plaintext")
fmt.Printf("%s\n", plaintext)
ciphertext, err := encrypt(key, plaintext)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%0x\n", ciphertext)
result, err := decrypt(key, ciphertext)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", result)
}
// See alternate IV creation from ciphertext below//var iv = []byte{35, 46, 57, 24, 85, 35, 24, 74, 87, 35, 88, 98, 66, 32, 14, 05}funcencrypt(key, text []byte)([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
returnnil, err
}
b := base64.StdEncoding.EncodeToString(text)
ciphertext := make([]byte, aes.BlockSize+len(b))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
returnnil, err
}
cfb := cipher.NewCFBEncrypter(block, iv)
cfb.XORKeyStream(ciphertext[aes.BlockSize:], []byte(b))
return ciphertext, nil
}
funcdecrypt(key, text []byte)([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
returnnil, err
}
iflen(text) < aes.BlockSize {
returnnil, errors.New("ciphertext too short")
}
iv := text[:aes.BlockSize]
text = text[aes.BlockSize:]
cfb := cipher.NewCFBDecrypter(block, iv)
cfb.XORKeyStream(text, text)
data, err := base64.StdEncoding.DecodeString(string(text))
if err != nil {
returnnil, err
}
return data, nil
}
출처 : https://stackoverflow.com/questions/18817336/golang-encrypting-a-string-with-aes-and-base64
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.25385 초 to webmaster... gogo sea. gogo sea.