批量生成ethereum私钥脚本

区块链分类的第一篇文章,今天就分享一个可以创建N个ethereum私钥的脚本吧。

这个脚本依赖ethereum生成私钥文件的工具:ethkey(我上传了一个编译好的在这里,仅供测试使用,为了安全要自己从源码编译),需要把ethkey与脚本放在当前文件夹下,如果放在其他路径可以修改脚本中ethkey的路径。

功能:

  1. 创建私钥,使用-n指定数字N,创建N个私钥文件,所有私钥放在当前以"keystore-日期"命名的目录下,可以使用-p参数指定一个密码,默认密码为空。
  2. 验证某个路径下所有私钥文件的密码是否正确,正确输出绿色的Success,错误输出红色的Fail。最后会统计验证结果,并打印出所有没有通过验证的私钥文件名。

用法:

Usage: ./newkeys [options]-n      number of new keys to generate-p  password of new keys, the default is blank-t        test password of key file(s) in path-h              display this help and exit
#!/bin/bash# help
help() {echo "Usage: $0 [options]"echo ""echo "    -n      number of new keys to generate"echo "    -p  password of new keys, the default is blank"echo "    -t        test password of key file(s) in path"echo "    -h              display this help and exit"echo ""
}#args: 
# $1 number
# $2 password
generateKeys() {keysNumber=$1password=$2if [ -z "$keysNumber" ]; thenecho "$0 need 1 parameters"returnfidate=`date +"%FT%H-%M-%S"`dirname=keystore-$dateaccountFile=accounts-$date.txtdefaultKeyFile=keyfile.json# mkdirecho "Create directory: $dirname"mkdir $dirname# generate keyI=1while [ $I -le $keysNumber ]; doecho "Progress: $I/$keysNumber"if [ -f $defaultKeyFile ]; thenrm -rf $defaultKeyFilefi## generate one keyret=`./ethkey generate <<-EOF
$password
$password
EOF`address=`echo $ret | grep -E -o "0x[[:digit:]a-f,A-F]{40,40}"`if [ "$address" = "" ]; thenecho "Error address, ethkey generate return: \n\n $ret"exit 1fi## rename the new key file mv keyfile.json $dirname/$address.key## append this new address to address fileecho $address >> $dirname/$accountFilelet I=$I+1doneecho "Finished."echo "Keys are stored in $dirname"
}#args: $1 directory
testKeys() {testDir=$1if [ -z "$testDir" ]; thenecho "$0 need 1 parameters"returnfiread -s -p "Password: " passwordecho ""if [ -f "$testDir" ]; thentestOneKey $testDir $passwordelif [ -d "$testDir" ]; thentestKeyDir $testDir $passwordfi}#args: 
# $1 directory path
# $2 password
testKeyDir() {allFiles=`find $testDir -type f`allFilesArray=($allFiles)keysNumber=${#allFilesArray[@]}failedFiles=""failedNumber=0I=0for file in ${allFilesArray[@]}dolet I++echo -n "Progress: $I/$keysNumber "testOneKey $file $passworddonelet successNumber=I-failedNumberecho "Finished." echo "Test $I files, Success number: $successNumber, Failed number: $failedNumber"echo "Failed Files: $failedFiles"
}#args: 
# $1 file path
# $2 password
testOneKey() {file=$1password=$2if [ ! -f "$file" ]; thenecho "$0 need 1 parameter"returnfiecho -n "$file"./ethkey inspect $file >/dev/null 2>&1 <<-EOF
$password
EOFif [ $? -eq 0 ]; thenecho -e "\033[32m Success\033[0m"elseecho -e "\033[31m Fail\033[0m"failedFiles+=" $file"let failedNumber++fireturn
}#
# main
## parse arguments
while getopts n:p:t:h OPT; docase $OPT inn)keysNumber=$OPTARG;;p)password=$OPTARG;;t)testDir=$OPTARG;;h)helpexit 0;;esac
doneif [ -n "$testDir" ]; thentestKeys $testDirexit 0
elif [ -z "$keysNumber" ]; thenhelpexit 0
elif [ $keysNumber -le 0 ]; thenhelpexit 0
figenerateKeys $keysNumber $password


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部