- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在关注 rfc6455 :
Concretely, if as in the example above, the |Sec-WebSocket-Key|
header field had the value "dGhlIHNhbXBsZSBub25jZQ==", the server
would concatenate the string "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
to form the string "dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-
C5AB0DC85B11". The server would then take the SHA-1 hash of this,
giving the value 0xb3 0x7a 0x4f 0x2c 0xc0 0x62 0x4f 0x16 0x90 0xf6
0x46 0x06 0xcf 0x38 0x59 0x45 0xb2 0xbe 0xc4 0xea. This value is
then base64-encoded (see Section 4 of [RFC4648]), to give the value
"s3pPLMBiTxaQ9kYGzzhZRbK+xOo=". This value would then be echoed in
the |Sec-WebSocket-Accept| header field.
并且无法生成正确的“Sec-WebSocket-Accept”。
为了了解我在线使用的流程SHA1 hash和 Base64 Encode .
online SHA1 hash对于“dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,给出正确的结果:“b37a4f2cc0624f1690f64606cf385945b2bec4ea”,如 rfc6455 中所述。
但是online Base64 Encode给我输入“b37a4f2cc0624f1690f64606cf385945b2bec4ea”的错误结果“YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==”。结果应该是“s3pPLMBiTxaQ9kYGzzhZRbK+xOo=”
我做错了什么?
最佳答案
您需要对原始 sha1 摘要进行 base64 编码。
您正在对长度为两倍的摘要的十六进制字符串表示形式进行编码。
在线工具处理文本而不处理原始二进制数据,这就是您得到错误结果的原因。
import hashlib, base64
h = hashlib.sha1("dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
print "hexdigest:", h.hexdigest() # hexadecimal string representation of the digest
print "digest:", h.digest() # raw binary digest
print
print "wrong result:", base64.b64encode(h.hexdigest())
print "right result:", base64.b64encode(h.digest())
这打印:
hexdigest: b37a4f2cc0624f1690f64606cf385945b2bec4ea
digest: ᄈzO,ÀbOミöFÏ8YEᄇᄒÄê
wrong result: YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==
right result: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
import hashlib, base64
h = hashlib.sha1(b"dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11")
print("hexdigest:", h.hexdigest()) # hexadecimal string representation of the digest
print("digest:", h.digest()) # raw binary digest
print()
print("wrong result:", base64.b64encode(h.hexdigest().encode()).decode())
print("right result:", base64.b64encode(h.digest()).decode())
这打印:
hexdigest: b37a4f2cc0624f1690f64606cf385945b2bec4ea
digest: b'\xb3zO,\xc0bO\x16\x90\xf6F\x06\xcf8YE\xb2\xbe\xc4\xea'
wrong result: YjM3YTRmMmNjMDYyNGYxNjkwZjY0NjA2Y2YzODU5NDViMmJlYzRlYQ==
right result: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
关于http - 从 "Sec-WebSocket-Accept"生成 "Sec-WebSocket-Key",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977916/
我已经包含了在我的 html 页面中显示我的页面中的用户名。 我还找到了显示相同的内容。 我需要知道的是,这些方法之间从 LDAP/DB 中选取用户名的方式是否有区别?哪种方法可以保持最佳响应时间?
情况:我使用(php)cronjob 来保持我的数据库最新。受影响的表包含大约 40,000 条记录。基本上,cronjob 会删除所有条目并随后插入它们(具有不同的 ofc 值)。我必须这样做,因为
每个与 sec:authentication="..."无论是否登录都会显示。甚至是明确的false导致div出现。 另一边与sec:authorize="..."即使有明确的 true 也是隐藏的.
我正在关注 rfc6455 : Concretely, if as in the example above, the |Sec-WebSocket-Key| header field had the
Timespan(0,0,secs) 和 Timespan.FromSeconds(secs) 的返回值有区别吗? 在我看来,不同之处在于 FromSeconds 接受 double。 最佳答案 最终
美好的一天,就我而言,一切都很好,并且在 localhost ide 上运行良好,但在 linux thymeleaf 下的站点上 sec:authorize 和 sec:authentication
我有一个 UIView 子类,在某些情况下我需要改变它的颜色一段时间,比如 5 秒,然后再改变颜色,我使用的方法是 performSelector:afterDelay: 和我传入的选择器是将颜色改回
测试之间的唯一变化是更改 TLS 版本。 Chrome 和 FireFox 之间的行为是相同的。 TLSv1 和 TLSv1.1 均达到 90 兆字节/秒。他们在 Java 6 (TLSv1) 和 J
我在数据框中有一个时间详细信息作为文本。 dict1={'time' : ['2 min 19 sec','2 min 43 sec','1 min 33 sec','32 sec','40 sec'
这里我们先学习 SECS-II 协议,给我的感受是先学完 SECS-II 协议,再去学习 SECS-I 和 HSMS 协议更加容易理解,所以这里我先介绍 SECS-II 协议。 文章的
03、SECS-I 协议介绍 上一篇我们学习了 SECS-II 协议,对 SECS-II 协议有了初略的了解,现在我们再来一起学习 SECS-I 协议。 文章的内容基本上来自参考
这里的 super 新手有一个 friend 帮助我制作了这个用于查看对冲基金 13fs 的网络爬虫。之前它运行良好,但最近我遇到了这个错误: response_two = get_request(s
我想创建一个条形图,其中 y 轴使用“min:sec”作为标签。但是,我要显示的数据以秒为单位。现在最好的方法是什么? zone time_in_zone 1 305
文件名first.java package p1; public class first { int a; public void display() { System.out.pri
我正在尝试读取和存储名为xx.sec.gz.的文件。正在下载该文件很好,但是其中存在的数据完全不同(无法读取)。我使用了retrbinary .....除了retrbinary之外,python中存在
class Win32_PerfRawData_Tcpip_NetworkInterface : Win32_PerfRawData { uint32 BytesReceivedPerSec;
我试图在 Matlab 中绘制一些关于分钟而不是秒的数据作为格式化时间,即 min.sec。 我有实时数据流,在收到每个样本的地方,它的时间以秒为单位也被发送。然后我根据时间绘制它们。现在,由于我的
我在这里面临一个棘手的情况。我有一个基于 java 的应用程序,它试图通过 scp 远程机器复制某些文件。在执行这些任务时,我从应用程序端发现以下错误消息。 scp protocol error mt
我创建了一个弗兰肯斯坦式的音频播放器,并且在轨道计时方面需要一些帮助。我现在有了它,所以它从 0 开始计数 -> 无论轨道时间是多少,以秒为单位。我似乎不知道如何将这些秒转换为分钟:秒。 我是使用 J
我有一个带有以下 View 代码的Spring + Thymeleaf项目。 Contacts Welcome to the site! Wrong us
我是一名优秀的程序员,十分优秀!