mirror of
https://github.com/siyuan-note/siyuan
synced 2026-04-21 13:37:52 +00:00
* 🎨 improve publish service https://github.com/siyuan-note/siyuan/issues/11928 * fix: change publish access storage * 🎨 publish access control #16041 * fix: publish access in embed block and search * fix: multiple lock in pubish service & insert locked content in publish service * fix: multiple lock * fix: password in embed block * fix: locked and forbidden docs in gallery * fix: dont use publish access block * fix: attribute view of publish disabled docs * fix: disable docs in table and gallery * fix: locked docs in attribute view * fix: purge publish access * fix: disable docs in table and gallery groups * fix: locked and disabled docs in attribute view, outline and preview * fix: create publish_access.go * fix: move publish auth to publish_access.go * fix: tag and ref of locked docs * fix: backlink of locked docs * fix: search in locked docs * fix: search history and asset * fix: copy to markdown * fix: hide command panel * fix: publish access control in mobile * fix: recent docs of invisible and locked docs * fix: backlink in mobile * fix: empty Tab * fix: get locked and forbidden doc assets and files * fix: refblock & asset * fix: disable /api/file/sql in publish mode * fix: publish access of kanban * fix: adjustment for review * fix: /api/filetree/setPublishAccess return error meesage * fix: move the publishAccess button to the More Menu & revert the fix for barCommand/menuCommand * fix: hotkey of command panel
85 lines
No EOL
2.3 KiB
Go
85 lines
No EOL
2.3 KiB
Go
// 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"
|
|
"crypto/sha256"
|
|
"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)]
|
|
}
|
|
|
|
func SHA256Hash(data []byte) string {
|
|
hash := sha256.New()
|
|
hash.Write(data)
|
|
return hex.EncodeToString(hash.Sum(nil))
|
|
} |