海运的博客

btc的找零地址及Electrum HD钱包

发布时间:June 12, 2018 // 分类: // No Comments

比特币私钥通过ecc算法生成对应的公钥,地址由公钥通过SHA256算法生成,由于交易时需提供公钥防止有朝一日公钥可以破解私钥,在交易时将剩下的余额转到一个未使用的地址(公钥未泄露)做为找零地址。
如果钱包找零地址是随机生成的且没及时备份可能导致币永久丢失,分层确定性钱包解决了此问题。

Electrum特定的助词生成确定性的bip32 root key(根密钥),然后根据确定性的算法(bip32)可生成无限数量的子私钥和子公钥,只需备份主私钥或助词词就可在任意Electrum客户端上找回所有已用的btc地址。
同时通过主公钥还可生成对应的子公钥,用于冷热钱包。
Electrum的接收地址BIP32 Derivation Path是m/0,找零地址是m/1。

注意通过主公钥和子私钥可算出主私钥。

btc比特币electrum冷热钱包使用

发布时间:June 11, 2018 // 分类: // No Comments

冷机器最好使用物理机器断网,虚拟机宿主机有被远程控制的可能。
离线的机器上使用助记词新建钱包,用私钥在线机器生成的交易数据签名。
2018-06-11_193317.png
2018-06-11_193332.png
2018-06-11_193359.png
2018-06-11_193411.png
使用自定义助词词,相当于给助词词加个密码,防止明文助记词被别人知道。
2018-06-11_193931.png
输入自定义助记词:
2018-06-11_193950.png
2018-06-11_194043.png
2018-06-11_194058.png
2018-06-11_194124.png
复制钱包master public key用作连网的机器上生成原始交易,发送离线机器上签名后的交易数据
2018-06-11_194254.png
在线机器上导入之前复制的public key:
2018-06-11_195413.png
2018-06-11_195428.png
2018-06-11_195452.png
2018-06-11_195510.png
2018-06-11_195534.png
http://docs.electrum.org/en/latest/coldstorage.html#coldstorage

php ssh登录服务器执行命令

发布时间:April 21, 2018 // 分类: // No Comments

<?php
$conn = ssh2_connect('1.1.1.1', 22);
if (!$conn) {
  die("conn fail\n");
}
if (ssh2_auth_password($conn, 'root', 'password')) {
  echo "auth sus\n";
} else {
  die("auth fail\n");
}
$stream = ssh2_exec($conn, "df  --output=avail /|tail -n 1");  
stream_set_blocking($stream, true);  
$res = trim(stream_get_contents($stream));
var_dump($res);

golang通过smartctl检测硬盘健康状态

发布时间:April 20, 2018 // 分类: // No Comments

先安装smartmontools,以管理员运行,不然不能正常开启smart,可使用smtp发送邮件

package main

import (
        "fmt"
        "io/ioutil"
        "os"
        "os/exec"
        "strings"
        "time"
)

func gethd() []string {
        cmd := exec.Command("smartctl", "--scan")
        //out, err := cmd.CombinedOutput()
        out, err := cmd.Output()
        //fmt.Println(string(out))
        if err != nil {
                fmt.Println("exec error", err)
        }
        stringSlice := strings.Split(string(out), "\n")
        devices := []string{}
        for _, v := range stringSlice {
                if v != "" {
                        s := strings.Fields(v)
                        devices = append(devices, s[0])
                }
        }
        return devices
}

func enable_smart(id string) bool {
        fmt.Println(id, "enable smart")
        cmd := exec.Command("smartctl", "-s", "on", id)
        _, err := cmd.Output()
        //fmt.Println(string(out))
        if err != nil {
                fmt.Println("exec smartctl -s on "+id, err)
                return false
        }
        return true
}

func check_smart(id string) bool {
        fmt.Println(id, "check smart")
        cmd := exec.Command("smartctl", "-i", id)
        out, err := cmd.Output()
        if err != nil {
                fmt.Println("exec smartctl -i "+id, err)
        }
        if strings.Contains(string(out), "SMART support is: Available") {
                fmt.Println(id, "SMART support is: Available")
                if strings.Contains(string(out), "SMART support is: Disabled") {
                        fmt.Println(id, "SMART support is: Disabled")
                        if !enable_smart(id) {
                                return false
                        }
                }
                return true
        } else {
                fmt.Println(id, "SMART support is: Unavailable")
        }
        return false
}
func main() {
        err := ioutil.WriteFile("C:/Windows/check_smart.txt", []byte("TESTING!"), 0644)
        if err != nil {
                fmt.Println("请以管理员身份运行")
                time.Sleep(time.Second * 3)
                os.Exit(1)
        }

        devices := gethd()
        //fmt.Println(devices)
        for _, v := range devices {
                if check_smart(v) {
                        fmt.Println(v, "check health")
                        cmd := exec.Command("smartctl", "-H", v)
                        out, err := cmd.Output()
                        //fmt.Println(string(out))
                        if err != nil {
                                fmt.Println("exec smartctl -H "+v, err)
                        }
                        if strings.Contains(string(out), "test result: PASSED") {
                                fmt.Println(v, "test result: PASSED")
                        } else if strings.Contains(string(out), "SMART Disabled") {
                                fmt.Println(v, "SMART Disabled")
                        } else {
                                fmt.Println(v, "test result: FAILED!")
                        }
                }
                fmt.Println("********************************************")
        }
}
分类
最新文章
最近回复
  • 404NTF: 交叉编译的作用是?
  • 404NTF: 请教一下 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go ...
  • 小智: 安利个PHP开发以太坊区块链的教程: http://xc.hubwiz.com/course/...
  • 陈浩南: 您好,您教程中的 dev.openwrt.org.cn 现在似乎不可用了。请问现在应该在哪里下...
  • 斑马斑马: 怎么查看虚拟机CPU 内存使用情况
  • zzg: http://downloads.openwrt.org.cn/PandoraBox/rali...
  • xiongrui: 看图
  • 傻狍子: filebrowser好像和这功能一样? https://github.com/filebro...
  • 陶国文: 想看看能不能安装
  • 傻狍子: 服务端设置了用户名密码认证的话,在openwrt的openvpn客户端的配置文件当中该如何更改...
归档
页面执行耗时:0.0345秒。-->