问题标签 [asn1]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# 无法从 OpenSSL 控制台行命令验证 ECDSA(384 位)base 64 数字签名
[版主,我在将这个问题压缩到字数限制时遇到了问题,请见谅。]
用例是在 Linux 服务器上使用 OpenSSL 使用 384 位椭圆曲线数字服务器算法 (ECDSA) 对许可证(纯文本)文件进行签名,数字签名的验证在客户的 Windows 桌面操作系统(Windows ) .NET 框架。
许可证文件和 Base 64 编码数字签名通过电子邮件发送给客户(不在共享公司网络上)。客户正在运行 C# 编写的 .NET Framework(Windows 版)应用程序并验证许可证和数字签名以解锁付费功能。
现在,我说的是 Linux,但下面给出的示例服务器端代码还不是 Linux 脚本语言。我正在使用在 Windows 8 上运行的 VBA 进行原型设计,最终我将转换为 Linux 脚本语言,但暂时请耐心等待。
关键是我使用的是 OpenSSL 控制台命令,而不是针对任何 OpenSSL 软件开发工具包(C++ 头文件等)进行编译。
一个棘手的部分(也许是开始代码审查的最佳位置)是从 DER 文件中挖掘出构成公钥的 X 和 Y 坐标。DER 密钥文件是使用抽象语法符号 (ASN1) 的二进制编码文件,那里有免费的 GUI 程序,例如Code Project ASN1。易于检查的编辑器,这里是公钥文件的屏幕截图
幸运的是,OpenSSL 有自己的内置 ASN1 解析器,因此将相同的详细信息写入控制台,如下所示
因此,在偏移量 20 处有 98 个字节包含 X 和 Y 坐标,在字节 20 处是一个标记(0x03),指示后面有一个字符串,在字节 21 处是长度,98(任何低于 127 的长度只需要一个字节)。所以实际上真正的 98 字节数据从 byte 22 开始,所以我总共读取了 100 个字节(98+2)。在字节 22 处是 0x00,这就是BIT STRINGS 的开始方式(参见第 5 点)。在字节 23 处是0x04,表示 X 和 Y 都遵循这称为未压缩形式(可以给出 X 值并计算 Y,在这种情况下使用 0x02 或 0x03)。在 0x04 之后是 X 和 Y 坐标,每个 48 个字节,因为一个字节中有 8 位,8*48=384。
因此,人们挖掘出两个(X 和 Y)非常长的十六进制数字作为字符串。下一个难题是创建适合 C# 代码的 Xml 文件。关键类是 C# 的 ECDsaCng,导入方法是 FromXmlString,它期望文件实现标准 Rfc4050。C# 的 ECDsaCng 导入的 Xml 文件要求 X 和 Y 是十进制而不是十六进制,所以我们必须编写另一个函数来转换,我从另一个Stack Overflow 问题中提取的另一种语言翻译。
这是 VBA 代码(有很多),您需要更改它将写入其工作文件的位置。要运行的两个代码块是EntryPoint1_RunECDSAKeyGenerationBatch_RunOnce
和EntryPoint2_RunHashAndSignBatch
应视为已安装 OpenSSL,我的版本在 C:\OpenSSL-Win64\
完整的VBA 代码在这里,因为 SO 有 30000 个字符的限制。给出了可能的罪魁祸首代码
这是 VBA 即时窗口的输出,它说明了控制台命令和运行响应EntryPoint1_RunECDSAKeyGenerationBatch_RunOnce
。
这是用于运行的 VBA 即时窗口输出EntryPoint2_RunHashAndSignBatch
...
接下来,我们创建一个 C# 经典控制台应用程序并粘贴以下代码以验证数字签名,记住客户将收到 base64 版本的数字签名。
我已经三次检查了这段代码。我已将许可证文件设为非常短的“Hello”并检查了字节和编码。我也检查了哈希值。我不知道下一步该做什么。请协助。提前致谢
python-2.7 - PySNMP SNMPV3 陷阱未发送
我正在为 snmpv3 实现 pysnmp 代码,试图将陷阱发送到我网络中的机器。我可以看到在 Wireshark 中可以看到陷阱,但它没有出现在我的任何陷阱接收器中。代码如下:
如果我删除 authKey、privKey、authProtocol 和 privProtocol,我可以看到陷阱接收器中收到了陷阱,但是当我将它们全部放入时,我看不到陷阱。
我的问题是:
- ubuntu 是否必须打开它的 161 和 162 端口才能让 windows 机器接收它?
- 即使使用硬编码的引擎 ID,我也可以发送没有身份验证的陷阱,但在完全身份验证的情况下是否需要正确的引擎 ID?这就是陷阱没有出现的原因吗?如果是这样,有人可以指导我找到接收系统的引擎 ID 吗?
- 我们可以肯定地说,既然 Wireshark 清楚地看到了陷阱,那么它只是陷阱接收器上的配置问题来显示陷阱吗?
请帮我解决一下这个。
谢谢你。
java - 阅读 DER Application Specific (asn1-java-bouncycastle)
我正在尝试使用 Bouncy castle asn1 库翻译 DER ApplicationSpecific 类型的对象(或者它可能是一个数组?),但我无法导航该结构。使用以下简单代码( arr 是我的字节数组)
我得到这个打印:
我可以猜到这是一个由 21 个元素组成的数组,但我不能更深入 谁能帮助我?非常感谢。
der - 您如何对 1994 年后的 ASN.1 EXTERNAL 类型进行编码?
背景:
在 1994 年之前,EXTERNAL
是这样定义的(带有自动和显式标记):
但从那以后,它被定义为:
Dubuisson 的ASN.1说(第 412 页):
特定于上下文的标签,特别是出现在
encoding
组件(类型CHOICE
)的替代品之前必须被编码,而不是那些在 1994 版本中计算的标签。
在第 413 页,他描述了如何对 进行编码INSTANCE OF
,他指出其编码方式与 相同EXTERNAL
。这些identification
节目仅由一个数字为 6 ( OBJECT IDENTIFIER
) 的通用标签编码。节目的encoding
形式
这意味着他正在编码一个INTEGER
, 5, 作为他的选择single-ASN-type
。
我的问题
如果 1994 年后的版本EXTERNAL
向后兼容,则data-value
必须转换为 1994 年前的替代版本之一encoding
。哪一个?
换句话说,如果我对 1994 年后的内容进行编码(EXTERNAL
仅出于示例的目的而使用),它是否会被编码为presentation-context-id
identification
或者
提前致谢!
c - OpenSSL ASN.1 模板引擎中的应用程序标签?
我正在尝试使用 OpenSSL ASN.1 模板 API(来自 asn1t.h)来解析我的应用程序中的 ASN.1 对象。问题是我必须使用应用程序标签而不是默认标签:
并且宏(如 ASN1_SEQUENCE)似乎没有提供应用标签参数。
php - phpseclib asn1 编码结构
我正在尝试使用 phpseclib ASN1.php,我有一张如下图;
我有一个 json 并为这张地图使用 json_decode(IdentityObject,true) ,如下所示;
json:
而这个 jsons 输出数组:
这个数组应该是什么结构我可以成功编译。
给出此错误的最终代码
最终代码:
php - 如何在 phpseclib 上设置 Application 7 标记和无标记 ASN1
我有一个用于编码 ASN1 的地图,就像我使用 phpseclip 进行编码一样:
当我用我的数组编码时,这个网站上的输出就像这样:https ://lapo.it/asn1js/
但是我想将 Application 7 标签添加到我的 ASN1 中,并且我想要这样的输出。
我想知道是否可以使用 phpseclip 给 Application X 标签。我的 php 版本 5.5。就像没有任何标签的那样,只需 [0][1] 标签将我的数组编码为 ASN1。
首先有可能然后怎么办?肿瘤坏死因子。寻求答案。
go - ASN.1 使用 go 结构解组wireshark 十六进制代码
我正在尝试从 tcp 转储中解码以下十六进制代码。18001c3080a080800106830200e20000a28080010181010d00008301650000
我尝试解码的 ASN.1 定义采用以下格式:
据我了解,来自 tcp 转储的 ConnectionEstablishedReply 的标签或类型是 24,而序列的标签是 16。这些标签中的不匹配是导致错误的原因:
解组时出错:asn1:结构错误:标签不匹配(16 vs {class:0 tag:24 length:0 isCompound:false}){optional:false explicit:false application:false defaultValue: tag: stringType:0 timeType :0 set:false omitEmpty:false} ConnectionEstablishedReply @2
与这些元素对应的 go 结构是:
对于其他元素也是如此。
解组代码:
在上一个问题(ASN.1 Unmarshalling using go structs give tags don't match error)中遇到类似问题,有人告诉我应该对这些结构使用隐式 asn.1 标签。但是,这些标签不适用于这些特定于应用程序的元素。
仅供参考,当仅将上述十六进制流的 3080a080800106830200e20000a28080010181010d00008301650000(消息部分)输入http://asn1-playground.oss.com/时,解码成功。然而,在 go 代码中使用相同的流时给出:
找到不定长度(不是 DER)
在这些 go 结构中应该使用哪些 asn.1 标签才能成功解组?
python - 信任链在哪里?[python] asn1crypto 和 pkcs11 阿拉丁 USB eToken
我有这个代码工作正常。我正在使用 USB eToken 签名。但是,在https://lapo.it/asn1js/中复制并粘贴此代码的 PEM 输出后,未显示信任链。此 eToken 由 CA 提供,因此它具有签名的信任链。怎么了?
asn1 - asn1tools 编码 asn.1 失败
asn.1文件(test.asn)如下,我想用python对文件进行编码得到asn.1的位串,但是当我用python按照not ber编码时,出现错误。我不知道异常的含义是什么。请帮忙检查一下。
python代码如下:
但错误还是发生了: