小编Joh*_*ith的帖子

在Go和OpenSSL中解密文件时的结果不同

我编写了以下代码来解密文件:

data, err := ioutil.ReadFile("file.encrypted")
if err != nil {
    log.Fatal(err)
}

block, err := aes.NewCipher(key)
if err != nil {
    log.Fatal(err)
}

mode := cipher.NewCBCDecrypter(block, iv)

mode.CryptBlocks(data, data)

err = ioutil.WriteFile("file.decrypted", data, 0644)
if err != nil {
    log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)

我还使用OpenSSL解密了该文件:

openssl aes-128-cbc -d -in file.encrypted -out file.decrypted -iv $IV -K $KEY
Run Code Online (Sandbox Code Playgroud)

Go程序的输出文件比OpenSSL的输出文件大8个字节.

从OpenSSL生成的文件中的hexdump尾:

ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
ff ff ff ff ff ff ff ff …
Run Code Online (Sandbox Code Playgroud)

encryption go

5
推荐指数
1
解决办法
71
查看次数

使用 Go 客户端接收和发送 cookie?

我希望我的 Go 应用程序通过网站进行身份验证,然后使用收到的 cookie 访问安全位置。以下卷曲示例准确地说明了我想要做的事情:

通过网站进行身份验证x-www-form-urlencoded并保存 cookie。数据自动进行 urlencode 编码:

curl 'https://www.example.com/login' \
    --cookie-jar cookies.txt \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data 'user=USER NAME&pass=PASS'
Run Code Online (Sandbox Code Playgroud)

现在身份验证 cookie 已保存cookies.txt,我只需发送它即可访问需要登录的页面:

curl 'https://www.example.com/profile' \
    --cookie cookies.txt
Run Code Online (Sandbox Code Playgroud)

我不想将 cookie 存储在我的应用程序的磁盘上,而只想存储在内存中,以便我可以在需要时使用它。

有谁有一个例子来说明如何在 Go 中实现这一点?

cookies http-authentication go web

5
推荐指数
1
解决办法
4035
查看次数

在Golang中提取部分字符串?

我正在学习Golang,所以我可以重写一些shell脚本.

我的URL看起来像这样:

https://example-1.example.com/a/c482dfad3573acff324c/list.txt?parm1=value,parm2=value,parm3=https://example.com/a?parm1=value,parm2=value
Run Code Online (Sandbox Code Playgroud)

我想提取以下部分:

https://example-1.example.com/a/c482dfad3573acff324c/list.txt
Run Code Online (Sandbox Code Playgroud)

在shell脚本中我会做这样的事情:

echo "$myString" | grep -o 'http://.*.txt'
Run Code Online (Sandbox Code Playgroud)

只使用标准库,在Golang中做同样事情的最佳方法是什么?

go

4
推荐指数
1
解决办法
1万
查看次数

Go代码的格式不一致?

以下是一些示例代码:

func main() {
    os.MkdirAll(outDir + id, 0755)
    os.Create(outDir + id + "/txt")
    os.OpenFile(outDir + id + "/" + ".tmp", os.OWRONLY|os_APPEND)
    os.Stat(outDir + id + "/.tmp")
}
Run Code Online (Sandbox Code Playgroud)

以下是两种格式后的输出go fmt或按Format转到游乐场:

func main() {
    os.MkdirAll(outDir+id, 0755)
    os.Create(outDir + id + "/txt")
    os.OpenFile(outDir+id+"/"+".tmp", os.OWRONLY|os_APPEND)
    os.Stat(outDir + id + "/.tmp")
}
Run Code Online (Sandbox Code Playgroud)

在空间os.MkdirAll()os.OpenFile()而他们在触及被删除os.Create()os.Stat().我希望格式化是相同的.

为什么会这样?

go gofmt

3
推荐指数
1
解决办法
140
查看次数

无法将JSON解组为struct

我想将以下JSON解组为结构:

{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}
Run Code Online (Sandbox Code Playgroud)

我试图以jsonStruct各种方式修改它,但结构总是空的:

package main

import (
    "encoding/json"
    "fmt"
)

type jsonStruct struct {
    main struct {
        data []struct {
            Key1 string `json:"KEY1"`
            Key2 string `json:"KEY2"`
            Key3 int    `json:"KEY3"`
            Key4 string `json:"KEY4"`
            Key5 string `json:"KEY5"`
            Key6 string `json:"KEY6"`
            Key7 string `json:"KEY7"`
       } `json:"data"`
    } `json:"MAIN"`
}

func main() {
    jsonData := []byte(`{"MAIN":{"data":[{"KEY1":"1111111","KEY2":"2222222","KEY3":0,"KEY4":"AAAAAAA","KEY5":"9999","KEY6":"4","KEY7":"BBBBBBB"}]}}`)

    var js jsonStruct

    err := json.Unmarshal(jsonData, &js)
    if err != nil {
            panic(err)
    }

    fmt.Println(js)
}
Run Code Online (Sandbox Code Playgroud)

输出:

{{[]}}
Run Code Online (Sandbox Code Playgroud)

我过去使用过的JSON没有括号,所以我怀疑问题与它们有关.

有人可以帮忙吗?

https://play.golang.org/p/pymKbOqcM-

go

2
推荐指数
1
解决办法
563
查看次数

释放未使用的内存?

我正在使用以下功能下载小于20MB的文件.它将整个内容读取到内存中,因为另一个函数必须在将字节写入磁盘之前对字节执行操作.

func getURL(url string) ([]byte, error) {
    resp, err := http.Get(url)
        if err != nil {
            return nil, fmt.Errorf("getURL: %s", err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
            return nil, fmt.Errorf("getURL: %s", err)
    }

    return body, nil
}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但系统会消耗所有内存.

是否可以释放body由其他函数处理后使用的内存,因此内存使用量不会大于当前正在处理的字节数?

memory garbage-collection http go server

2
推荐指数
1
解决办法
458
查看次数

从 Golang 中的文本文件读取?

我想做这个:

  1. 从文本文件中读取一行。
  2. 处理线。
  3. 删除该行。

我的第一个想法是用 将整个文件读入内存ioutil.Readfile()
但我不确定如何在处理完该行后更新文本文件,
以及如果在文本文件被读入后将额外的行添加到文本文件中会发生什么记忆?

我通常编写 shell 脚本,并会做这样的事情:

while read -r line; do
    echo "${line}"
    sed -i 1d "${myList}"
done < "${myList}"
Run Code Online (Sandbox Code Playgroud)

在 Golang 中执行此操作的最佳方法是什么?

go

1
推荐指数
1
解决办法
4854
查看次数