Something went wrong. Try again.
A privacy-first, self-hosted, fully open source personal knowledge management software, written in typescript and golang. (PERSONAL FORK)
Something went wrong. Try again.
Go
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879// SiYuan - Refactor your thinking// Copyright (c) 2020-present, b3log.org//// This program is free software: you can redistribute it and/or modify// it under the terms of the GNU Affero General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU Affero General Public License for more details.//// You should have received a copy of the GNU Affero General Public License// along with this program. If not, see <https://www.gnu.org/licenses/>.
package util
import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/hex"
"github.com/siyuan-note/logging")
var SK = []byte("696D897C9AA0611B")
func AESEncrypt(str string) string { buf := &bytes.Buffer{} buf.Grow(4096) _, err := hex.NewEncoder(buf).Write([]byte(str)) if err != nil { logging.LogErrorf("encrypt failed: %s", err) return "" } data := buf.Bytes() block, err := aes.NewCipher(SK) if err != nil { logging.LogErrorf("encrypt failed: %s", err) return "" } cbc := cipher.NewCBCEncrypter(block, []byte("RandomInitVector")) content := data content = pkcs5Padding(content, block.BlockSize()) crypted := make([]byte, len(content)) cbc.CryptBlocks(crypted, content) return hex.EncodeToString(crypted)}
func pkcs5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ciphertext)%blockSize padtext := bytes.Repeat([]byte{byte(padding)}, padding) return append(ciphertext, padtext...)}
func AESDecrypt(cryptStr string) []byte { crypt, err := hex.DecodeString(cryptStr) if err != nil { logging.LogErrorf("decrypt failed: %s", err) return nil }
block, err := aes.NewCipher(SK) if err != nil { return nil } cbc := cipher.NewCBCDecrypter(block, []byte("RandomInitVector")) decrypted := make([]byte, len(crypt)) cbc.CryptBlocks(decrypted, crypt) return pkcs5Trimming(decrypted)}
func pkcs5Trimming(encrypt []byte) []byte { padding := encrypt[len(encrypt)-1] return encrypt[:len(encrypt)-int(padding)]}