github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/cmd/ethkey/changepassphrase.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 package main 10 11 import ( 12 "fmt" 13 "io/ioutil" 14 "strings" 15 16 "github.com/ethereum/go-ethereum/accounts/keystore" 17 "github.com/ethereum/go-ethereum/cmd/utils" 18 "gopkg.in/urfave/cli.v1" 19 ) 20 21 var newPassphraseFlag = cli.StringFlag{ 22 Name: "newpasswordfile", 23 Usage: "the file that contains the new passphrase for the keyfile", 24 } 25 26 var commandChangePassphrase = cli.Command{ 27 Name: "changepassphrase", 28 Usage: "change the passphrase on a keyfile", 29 ArgsUsage: "<keyfile>", 30 Description: ` 31 Change the passphrase of a keyfile.`, 32 Flags: []cli.Flag{ 33 passphraseFlag, 34 newPassphraseFlag, 35 }, 36 Action: func(ctx *cli.Context) error { 37 keyfilepath := ctx.Args().First() 38 39 //从文件中读取密钥。 40 keyjson, err := ioutil.ReadFile(keyfilepath) 41 if err != nil { 42 utils.Fatalf("Failed to read the keyfile at '%s': %v", keyfilepath, err) 43 } 44 45 // 46 passphrase := getPassphrase(ctx) 47 key, err := keystore.DecryptKey(keyjson, passphrase) 48 if err != nil { 49 utils.Fatalf("Error decrypting key: %v", err) 50 } 51 52 //获取新密码。 53 fmt.Println("Please provide a new passphrase") 54 var newPhrase string 55 if passFile := ctx.String(newPassphraseFlag.Name); passFile != "" { 56 content, err := ioutil.ReadFile(passFile) 57 if err != nil { 58 utils.Fatalf("Failed to read new passphrase file '%s': %v", passFile, err) 59 } 60 newPhrase = strings.TrimRight(string(content), "\r\n") 61 } else { 62 newPhrase = promptPassphrase(true) 63 } 64 65 // 66 newJson, err := keystore.EncryptKey(key, newPhrase, keystore.StandardScryptN, keystore.StandardScryptP) 67 if err != nil { 68 utils.Fatalf("Error encrypting with new passphrase: %v", err) 69 } 70 71 //然后写新的关键文件代替旧的关键文件。 72 if err := ioutil.WriteFile(keyfilepath, newJson, 600); err != nil { 73 utils.Fatalf("Error writing new keyfile to disk: %v", err) 74 } 75 76 //不要打印任何内容。成功返回, 77 //生成一个正的退出代码。 78 return nil 79 }, 80 }