小编min*_*vor的帖子

如何在不关闭套接字的情况下将FIN Flag发送到主机

我写了一个C代码,它创建了一个套接字,到目前为止它工作正常.在RFC for TCP中,我发现可以发送FIN标志告诉其他主机我想要退出或谈话.FIN标志并不意味着其他主机无法发送更多数据.因此,在一个完美的世界中,我会发送FIN标志,另一个主机知道我不想再说话,他发送剩余的数据并在此之后关闭.但我怎么能发送FIN ??? close()函数对我来说或者更好地设置linux内核在放弃资源时所做的事情.但是放弃资源意味着我不能再使用recv()函数,因为当我调用close()函数时,内核会放弃文件描述符.那么如何在FIN标志之后读取其他主机可能要发送的其余数据呢?我打赌有一个干净的解决方案

c sockets linux posix tcp

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

sha1与go在python和openssl中的区别

我试图在go中构建一个base64编码的sha1哈希,但我得到的结果与其他编程语言的结果非常不同

package main

import (
    "crypto/sha1"
    "encoding/base64"
    "fmt"
)

func main() {
    c := sha1.New()
  input := []byte("hello")
  myBytes := c.Sum(input)
  fmt.Println(base64.StdEncoding.EncodeToString(base64.StdPadding))
}
Run Code Online (Sandbox Code Playgroud)

此Go Code打印出来 aGVsbG/aOaPuXmtLDTJVv++VYBiQr9gHCQ==

我的Python代码看起来像这样

import hashlib
import base64


print(base64.b64encode(hashlib.sha1('hello').digest()))
Run Code Online (Sandbox Code Playgroud)

和输出 qvTGHdzF6KLavt4PO0gs2a6pQ00=

我的用于比较的bash命令看起来像这样

echo -n hello| openssl dgst -sha1 -binary |base64
Run Code Online (Sandbox Code Playgroud)

输出这个 qvTGHdzF6KLavt4PO0gs2a6pQ00=

这让我假设python代码正在做一切正确的事情.但为什么要打印另一个结果.我的错误在哪里?

Thnx提前

python encryption openssl sha1 go

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

标签 统计

c ×1

encryption ×1

go ×1

linux ×1

openssl ×1

posix ×1

python ×1

sha1 ×1

sockets ×1

tcp ×1