最近想储存些多个类型虚拟货币(btc,ltc,eth,eos),但是私钥太多,怕忘搞丢所以想改改加密函数 自己输入字符串生成私钥(为了让多个加密货币的私钥加密随机串一致)
但是golang接触的不多 所以看不懂该怎么改 文中关键函数为` io.ReadFull(rand, b)` 我想让rand 随机字符串,改为自己定义字符串如"123456" 再加密为私钥 这样我就只需要记住字符串再保存这个golang文件就不怕丢失私钥了 ,也不怕被盗
但这里他是一个io类型所以不知道该怎么入手, 描述完毕谢谢
**项目文件地址 github.com/oldnicke/ltcaddressgenie**
```
var priv ltckey.PrivateKey
priv, err := ltckey.GenerateKey(rand.Reader)
func GenerateKey(rand io.Reader) (priv PrivateKey, err error) {
/* See Certicom's SEC1 3.2.1, pg.23 */
/* See NSA's Suite B Implementer’s Guide to FIPS 186-3 (ECDSA) A.1.1, pg.18 */
/* Select private key d randomly from [1, n) */
/* Read N bit length random bytes + 64 extra bits */
b := make([]byte, secp256k1.N.BitLen()/8+8)
_, err = io.ReadFull(rand, b)
if err != nil {
return priv, fmt.Errorf("Reading random reader: %v", err)
}
d := new(big.Int).SetBytes(b)
/* Mod n-1 to shift d into [0, n-1) range */
d.Mod(d, new(big.Int).Sub(secp256k1.N, big.NewInt(1)))
/* Add one to shift d to [1, n) range */
d.Add(d, big.NewInt(1))
priv.D = d
/* Derive public key from private key */
priv.derive()
return priv, nil
}
```
```go
package main
import (
"fmt"
"io"
)
func main() {
name := NewMyRand("123456789012")
b := make([]byte, 100)
n, err := io.ReadFull(name, b)
if err != nil {
panic(err)
}
fmt.Println(n, string(b))
}
type MyRand struct {
buf []byte
pos, len int
}
func NewMyRand(s string) io.Reader {
t := []byte(s)
return &MyRand{buf: t, pos: 0, len: len(t)}
}
func (m *MyRand) Read(p []byte) (int, error) {
if len(p) == 0 {
return 0, nil
}
if m.pos >= m.len {
m.pos = 0
}
n := copy(p, m.buf[m.pos:])
m.pos += n
return n, nil
}
```
#1