我正在编写一个大量使用密码学的应用程序。像大多数网络应用程序一样,我的将数据分解为不同类型的消息(即时消息、文件块、视频帧等)——并且必须检查每个消息的真实性,以防止篡改和正确的来源。到目前为止,我能够使用 ECDH 来协商我已经用于 AES 的共享秘密。当然,以后可以使用相同的共享秘密。
我的问题是:在这种情况下,使用 ECDSA 来签署每条消息是否有任何额外的好处,而不是简单地使用 ECDH 与 HMAC 建立的共享秘密?
下面,当我说 M 时,我的意思是加密消息或明文;应该没关系。请更正以下任何错误。
我知道在 ECDSA(或 DSA)中,通常M使用安全散列算法(我目前使用 SHA-2 之一)对消息 ( ) 进行散列处理H(M),然后H(M)使用签名者的私钥对其进行加密。这会产生R和S整数(签名)。然后,M、R 和 S 被发送给已经拥有发送者公钥的接收者。 H'(M)计算,并使用R和验证签名S。BouncyCastle 提供了ECDSASigner实现这一点的方法。
在 HMAC 中,需要一个共享机密,我有。然后:(
HMAC(K, M) := H( f2(K) || H(f1(K) || M) )
感谢您的更正,Pa?lo Ebermann。有关详细信息,请参阅他的回答。)
那么,考虑到 DH/ECDH 安全地协商共享秘密,我是否有理由不使用 HMAC?
相关:为什么NSA为 DSA 而不是 MAC 指定标准算法?仅仅因为它可以是 SHA-2 + AES?
速度在这里很重要,因为我希望我正在制定的这个协议不仅支持现在的文本消息,而且在不久的将来支持大文件和视频帧。因此,我更喜欢使用 HMAC,但要确保我可以达到上述目标。
谢谢你的帮助!
我经常写一些脚本来做一些事情,通常涉及 SQL,在不同的主要模式下。也许它看起来像这样:
sql = """
SELECT * FROM table WHERE row_awesomeness > 1000
"""
Run Code Online (Sandbox Code Playgroud)
我希望能够适当地缩进 SQL,所以它看起来像:
sql = """
SELECT *
FROM table
WHERE row_awesomeness > 1000
"""
Run Code Online (Sandbox Code Playgroud)
我对所使用的 SQL 缩进算法并不挑剔,但我根本无法使用任何东西。我不是一个巨大的风扇sql-indent.el,但在新的缓冲区中使用它(功能我甚至不能得到这工作sql-indent-buffer没有任何东西从我的第一个描述改变,我肯定要的SELECT,FROM和WHERE条款是分开的上我认为非常标准的线条)。
理想情况下,我会突出显示包含 SQL 的区域并执行类似的操作M-x sql-indent-region RET- 不需要在换行符上缩进的内容。
我有一个CSV文件有一些引用问题:
"Albanese Confectionery","157137","ALBANESE BULK ASST. MINI WILD FRUIT WORMS 2" 4/5LB",9,90,0,0,0,.53,"21",50137,"3441851137","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)
SuperCSV正在窒息这些水果虫(双关语).我知道2"应该是2"",但事实并非如此.LibreOffice实际上正确地解析了这个(让我感到惊讶).我正在考虑编写自己的小解析器,但其他行在字符串中有逗号:
"Albanese Confectionery","157230","ALBANESE BULK JET FIGHTERS,ASSORTED 4/5 B",9,90,0,0,0,.53,"21",50230,"3441851230","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)
有没有人知道Java库会处理这样的疯狂事情?或者我应该尝试所有可用的?或者我最好自己解决这个问题?
我已经阅读了我认为与此问题相关的RFC 2459(Internet X.509公钥基础结构证书和CRL配置文件)部分.但是,我并不完全清楚证书的有效期(特别是到期日期)的目的是什么.
我的理解是,证书的目的是以可以验证的方式将公钥绑定到身份(在X.509中,通过证书颁发机构,或在OpenPGP中,通过信任网).因此,在我看来,证书从创建时起有效,直到相应的私钥被泄露(或雇员被解雇,或其他),在这种情况下,它将被放在证书撤销列表中(我相信).
在什么情况下这不是真的?为什么身份与公钥的绑定突然变得无效?我知道大多数证书颁发机构都是商业企业,因此获得经常性费用是有利可图的,但我正在制作一个开源项目,只需生成证书(免费),将服务器上的用户名绑定到公钥,并且用户的密码用于向CA验证他的身份(当然,存储他的哈希密码).
我读过维基百科关于Windows-1252字符编码的文章。对于字节值<128的字符,它应该与ASCII/UTF-8相同。
这是有道理的:
php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));"
'Windows-1252'
正确检测到左弯撇号。
php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));"
false
啊?字母“a”不是Windows-1252吗?
我运行此程序的终端设置为 UTF-8。因此,这应该与字母“a”的 ASCII 字节序列相同。为了最小化变量,如果我指定正确的 Windows-1252字节序列:
php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));"
false
在这些情况下,更改“strict”参数(其文档非常无用)没有任何作用。
我正在exercism.org 上浏览 x86-64 教程。我在 Linux 上使用 NASM,生成 ELF 二进制文件。只有一点 C 代码可以在测试工具中调用我的汇编代码。他们的构建系统-pie在 LDFLAGS 和-fPIECFLAGS 中指定(除其他外,但我认为这些是最相关的)。因此,我需要(并且想了解)一个使用 PIC 的解决方案,它需要 RIP 相对寻址。
我有一个rdi名为 的 8 字节 (qword) 值数组的索引 (in ) values。我只想获取偏移量处的地址,以便将mov其指向的值存入寄存器。或者我会接受mov直接接受该值。
我试过这个:
lea rbx, [rel values + rdi * 8]
Run Code Online (Sandbox Code Playgroud)
我的理解是,这将查看该部分中rip的地址(相对于 ),然后它将添加正确的偏移量()并将其放入 中。valuesdatardi * 8rbx
但这会产生下一个错误:
Run Code Online (Sandbox Code Playgroud)/usr/bin/ld: space_age.o: relocation R_X86_64_32S against `.data' can not be used when making a PIE object; recompile with -fPIE
我理解这 …
我正在为API编写客户端.一种方法,posts返回用户帖子的数组.
在具有继承的语言中,我将创建一个抽象基类Post,然后将其子类化为每种类型的帖子创建一个具体类.我会在基础构造函数或工厂方法Post,也许fromJson(),这需要一个JSON对象,并提取所有公共字段.然后我会在每个子类中覆盖它以提取专用字段,确保调用基本实现来干掉公共字段的提取.
Go没有继承,但它有组合.我定义了一个包含Post所有公共字段的结构,然后我为每个具有匿名Post字段的类型创建了一个结构,以便它包含所有Post字段.例如,
type PhotoPost struct {
Post // which contains: ID int; URL string; etc
Caption string
Height int
Width int
/// etc
}
Run Code Online (Sandbox Code Playgroud)
我的目标之一是我想让我的客户的用户轻松访问Post的公共字段.所以我绝对不希望只有Posts()我正在写的方法返回interface{},因为那时任何时候有人想要获取所有帖子的ID,例如,他们将不得不做一个可怕的类型切换,这将是一个使用的模式一遍又一遍让我畏缩:
func GetIDs(posts []interface{}) []int {
var ids []int
for _, p := range posts {
switch p.(type) {
case PhotoPost:
ids = append(ids, p.(PhotoPost).ID)
//... repeat for the 7 other kinds of posts, …Run Code Online (Sandbox Code Playgroud) 我正在使用socket进行聊天应用程序,我意外地得到了SocketException.理想情况下应如何处理此异常?我目前只是重新连接socket.如何确保我的套接字在应用程序级别上运行?我知道方法setKeepAlive
java ×2
security ×2
assembly ×1
composition ×1
cryptography ×1
csv ×1
dry ×1
dsa ×1
elisp ×1
emacs ×1
go ×1
hmac ×1
indentation ×1
nasm ×1
php ×1
refactoring ×1
relocation ×1
sockets ×1
sql ×1
ssl ×1
supercsv ×1
utf-8 ×1
x509 ×1
x86-64 ×1