du9537 2019-01-03 15:42
浏览 69
已采纳

使用golang创建Veracrypt卷

Trying to pass go command line instructions to start veracrypt but it gets exit status 1 or doesn't show an error and doesn't create the requested volume.

func main() {
    cmd := exec.Command("veracrypt",
        "-c", "/home/user/test/samplevolume.vcrypt",
        "--volume-type", "normal",
        "--filesystem", "FAT",
        "--hash", "SHA256",
        "--encryption", "AES",
        "--size", "10M",
        "--pim", "1234",
        "-k", "",
        "--random-source", "/home/user/test/README.md")

    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stderr = &stderr

    stdin, err := cmd.StdinPipe()
    if err != nil {
        fmt.Println(fmt.Sprint(err))
    }

    go func() {
        defer stdin.Close()
        err = cmd.Run()
        // io.WriteString(stdin, "1234")
        // io.WriteString(stdin, "y")
        // io.WriteString(stdin, "1234")
    }()

    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return
    }
    fmt.Println("Result: " + out.String())
    // outin, err := cmd.CombinedOutput()
    // if err != nil {
    //  log.Fatal(err)
    // }

    // fmt.Printf("%s
", outin)
}

The commented part is the other approach that I used which results in exit status 1.

The reason for passing the 3 strings at the end "1234", y, "1234" is because we want to enter the password interactively.

The code doesn't end up creating the veracrypt files.

here is the commandline instructions for veracrypt that we are trying to invoke using golang.

veracrypt -c ~/test/samplevolume.vcrypt --volume-type normal --filesystem FAT --hash SHA256 --encryption AES --size 10M --pim 1234 -k= --random-source ~/test/README.md

Note: Everything is on linux if that matters.

Edit: Also, I am new to golang, sorry if I have made an obvious mistake.

  • 写回答

2条回答 默认 最新

  • dsff788655567 2019-01-04 14:44
    关注

    So I figured out what I was doing wrong. I should have been using the cmd.Start and cmd.Wait. so here is the corrected version. This version can also take user input correctly.

    func main() {
        cmd := exec.Command("veracrypt",
            "-c", "/home/user/test/samplevolume.vcrypt",
            "--volume-type", "normal",
            "--filesystem", "FAT",
            "--hash", "SHA256",
            "--encryption", "AES",
            "--size", "10M",
            "--pim", "1234",
            "-k", "",
            "--random-source", "/home/user/test/README.md")
    
        var out bytes.Buffer
        var stderr bytes.Buffer
        cmd.Stderr = &stderr
    
        stdin, err := cmd.StdinPipe()
        if err != nil {
            fmt.Println(fmt.Sprint(err))
        }
    
        go func() {
            defer stdin.Close()
            err = cmd.Start()
            io.WriteString(stdin, "1234
    ")
            io.WriteString(stdin, "y
    ")
            io.WriteString(stdin, "1234
    ")
        }()
    
        if err != nil {
            fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
            return
        }
    
        err = cmd.Wait()
        if err != nil {
            fmt.Printf("Command finished with error: %v", err)
        }
    
        fmt.Println("Result: " + out.String())
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?