🎨 支持通过密码短语派生数据仓库密钥 https://github.com/siyuan-note/siyuan/issues/5478

This commit is contained in:
Liang Ding 2022-07-21 21:43:46 +08:00
parent bd30383be5
commit 25d3985ed0
No known key found for this signature in database
GPG key ID: 136F30F901A2231D
3 changed files with 58 additions and 0 deletions

View file

@ -18,6 +18,7 @@ package model
import (
"crypto/rand"
"crypto/sha256"
"encoding/base64"
"errors"
"fmt"
@ -125,6 +126,40 @@ func ResetRepo() (err error) {
return
}
func InitRepoKeyFromPassphrase(passphrase string) (err error) {
util.PushMsg(Conf.Language(136), 3000)
if err = os.RemoveAll(Conf.Repo.GetSaveDir()); nil != err {
return
}
if err = os.MkdirAll(Conf.Repo.GetSaveDir(), 0755); nil != err {
return
}
passphrase = gulu.Str.RemoveInvisible(passphrase)
passphrase = strings.TrimSpace(passphrase)
if "" == passphrase {
return errors.New(Conf.Language(142))
}
salt := fmt.Sprintf("%x", sha256.Sum256([]byte(passphrase)))[:16]
key, err := encryption.KDF(passphrase, salt)
if nil != err {
logging.LogErrorf("init data repo key failed: %s", err)
return
}
Conf.Repo.Key = key
Conf.Save()
time.Sleep(1 * time.Second)
util.PushMsg(Conf.Language(138), 3000)
time.Sleep(1 * time.Second)
if initErr := IndexRepo("[Init] Init data repo"); nil != initErr {
util.PushErrMsg(fmt.Sprintf(Conf.Language(140), initErr), 0)
}
return
}
func InitRepoKey() (err error) {
util.PushMsg(Conf.Language(136), 3000)