- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为计费系统(在这种情况下还可以管理域配置)完成Domain Registrar插件的过程中,最后一点与实现DNSSEC支持有关。
计费系统正在将以下与SAMPLE DNSSEC有关的数据发送到我的PHP插件:
'dnsSecInfo' =>
array (
0 =>
array (
'keyAlg' => 5,
'digestAlg' => 1,
'digest' => '1d181b34061ee98088b7a9e6db6e41a130674df0',
'key' => 'AwEAAaqZeENizOE6uvpDtIfQBB26YebvRdZA/ZjXjKLZdMmMK641sBIvho+yrTveIYclM+8lEVHiq64MY8R2G1IPmKDKXG26rM7NVE0Qx1KL2wRVbRrduRdBmKgJo3XQ3niueviKYXXmeVIO3EhrJsCq272Tm3DaDvng/M7uw1vDnanR2pYNcxI08fZOA6PLGDoUWlDNLGAHHkCvfdWUktVt1DA0GtL/qE/WUgxK6hJyeaXXb0+yq3qCMZh48WgluMFib54D0GN3PI3ZZvBMblAZHmFGqgyVwtPKEimXm/VREe2QtZy3cRgPbfOuiQi8gRhzO+/If8Wi9YnyLovjdsSjRsE=',
),
),
2.1. DNSKEY RDATA Wire Format
The RDATA for a DNSKEY RR consists of a 2 octet Flags Field, a 1
octet Protocol Field, a 1 octet Algorithm Field, and the Public Key
Field.
1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Protocol | Algorithm |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Public Key /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The input is the wire
format of the RDATA portion of the DNSKEY RR.
.....
unsigned int
keytag (
unsigned char key[], /* the RDATA part of the DNSKEY RR */
unsigned int keysize /* the RDLENGTH */
)
{
unsigned long ac; /* assumed to be 32 bits or larger */
int i; /* loop index */
for ( ac = 0, i = 0; i < keysize; ++i )
ac += (i & 1) ? key[i] : key[i] << 8;
ac += (ac >> 16) & 0xFFFF;
return ac & 0xFFFF;
}
key
字符数组“ DNSKEY RDATA”? (我猜到那旗
& 0xFFFF
的目的是什么?什么是php等效项?我倾向于认为它几乎相同,因为PHP的语法基于C。但是如果没有正确的输入/输出示例,将很难确保我正确地使用了它。
最佳答案
您的问题不是很清楚。您是在构建注册服务商系统还是与注册服务商建立联系的系统?
此外,您的标题还涉及构建DNSKEY RDATA,但是问题的全部内容涉及计算keyid / keytag,反之,该ID / keytag不会与DNSKEY记录一起发布(仅与RRSIG记录一起发布,但是dig
之类的工具可以重新计算它)在您看到DNSKEY记录时将其显示为注释,以帮助您)。
无论哪种情况,您都不必处理DNSSEC数据线格式。在第一种情况下(注册服务商系统),您通常通过EPP与注册表交互,而EPP具有对DNSSEC数据的特定扩展名,称为secDNS。见RFC5910
现在,关于DNSSEC本身。它使用加密技术,因此最好不要尝试手动重做。似乎PHP具有Net_DNS2
可以帮助您。
但是我不明白的是,为什么你必须嘲弄这些价值观。如果您是注册商,则将客户给您的值传递给注册商;您可以稍微验证一下它们的语法,但只需传递它们即可。如果您是作为客户向注册服务商提交数据,那么您又从某个地方获得了此数据,我不明白为什么您必须对此采取行动。
现在您谈到一个注册管理机构,因此现在我可以想象您是一个注册管理机构。首先阅读RFC5910。您将看到有两个接口,实际上是3种情况,从现在最常用的到少用的顺序:dsData
接口,您作为注册服务商,基本上向注册表提供了DS记录,该记录将由注册表发布;此数据(实际上是4个字段,您在第一个字段中列出了这些数据)是由您自己创建的密钥构造的,否则托管公司将在域zonefile中将其发布为DNSKEY记录keyData
接口,同样具有4个字段,但与之前的4个字段不同(第二个字段位于您的第二个字段中,或者您的帖子顶部为PHP结构),实际上您向注册表发送了注册表项(公共部分),注册管理机构将从中计算DS记录本身
还有一个混合情况,它基本上是dsData
,里面是keyData
,这意味着您同时发送了要发布的DS和相关的密钥,这是没有用的,但是注册表可以重做DS计算以进行检查,从键。
如果您阅读RFC,则会对2组4个字段进行解释,并了解其含义。
对于其中一些,您只能使用几个离散值:
算法值只能是https://www.iana.org/assignments/dns-sec-alg-numbers/dns-sec-alg-numbers.xhtml#dns-sec-alg-numbers-1中的一个
哈希算法值只能是https://www.iana.org/assignments/ds-rr-types/ds-rr-types.xhtml中的一个
至于您的具体问题,似乎您正在尝试从密钥内容中计算出keyID / keytag(令人惊奇的是,已经发现该算法有缺陷,但是无论如何),正如我之前说过的那样,您不应该自己尝试重做。如果可能的话,请尝试找到一个可以为您执行此操作的PHP库,或者至少使用现有工具,但这取决于生成密钥的方式,从何处获取密钥等等。
例如,请参见此工具:https://linux.die.net/man/8/dnssec-keygen
否则,您将具有以下代码:https://www.v13.gr/blog/?p=239
它使用Python,但您可以从中获得PHP版本。请记住,关键字标签仅取决于关键字内容,而DS哈希值取决于关键字和域名(因此,即使您对不同的域名使用相同的关键字,DS值也会有所不同)。
因此,对于您的1)+ 2),它们大约是keyData
接口所需的4个字段:
标志:是256还是257,具体取决于密钥是用作KSK还是ZSK;作为向主要注册管理机构提交关键值的注册服务机构,它应该仅为KSK,因此值为257。
protocol:始终为3,请参见2.1.2。的RFC4034
算法:来自同一RFC的附录1,基本上是上述两个链接的第一条链接,iana.org
算法的输入是DNSKEY RDATA的值,如第2.2节所述:“公钥字段必须表示为公钥的Base64编码。”,因此此处是一个字符列表。
对于3):执行& 0xFFFF
意味着将16位最低有效位(通常在写入它们时,最右边的16位),因为&
是逻辑AND,0xFFFF为2 ^ 16-1(65535),是设置为值1的16位。否则,如果最终值超过65535,则由于该键值被定义为16位值,因此在该操作中仅保留其中的一部分。
顺便说一句,您可以使用dnssec-keygen
命令创建密钥及其密钥标签,以验证您自己的算法。dnssec-keygen -a RSASHA256 -b 2048 test1
将产生:
Generating key pair.......+++ ............................+++
Ktest1.+008+05433
008
是算法(来自RSASHA256),而
05433
是所计算的keyId(密钥标签)。如果查看在
.key
中计算的精加工文件,则在整个DNSKEY记录内,根据规范(该密钥是计算密钥ID的算法的输入),密钥编码为Base64。
关于php - 构建DNSKEY RR的RDATA部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48728496/
我有很多 .RData 文件,其中包含我在之前的分析中保存的一个数据框,并且每个加载的文件的数据框都具有相同的名称。因此,例如使用 load(file1.RData) 我得到一个名为 'df' 的数据
我有一个矩阵: mat<-matrix(data=1:30,ncol=10,nrow=3) 我想将其保存到 Rdata: save(mat, file="m.Rdata") 然后加载回来: m<-lo
我有大约 30 行代码可以做到这一点(获得 Z 分数): data$z_col1 <- (data$col1 - mean(data$col1, na.rm = TRUE)) / sd(data$co
有没有办法可以用另一个替换 .Rdata 文件中的表?我可以使用 edit(x) 命令来编辑它,但是手动执行此操作会花费大量时间;此外,我还没有找到向其中添加行的方法。 最佳答案 我认为您需要阅读一些
看完this question我试图清理我的工作区,发现每次打开 R 时,我最近删除的所有原始项目都会恢复。然后我检查了 .RData ,发现它在几周内没有被修改,尽管我反复保存了工作区图像。 .RD
假设我们有这种情况: 我有很多 .RData 文件,它们超过 100mb(无论如何,但很大)。 在每个 .RData 文件中都有一个名为“Dataset_of_interest”的数据集,它们都是我想
我要加载 PakPMICS2018bh.RData数据来自 https://github.com/myaseen208/PakPMICS2018Data/并使用以下代码引发错误: library(RC
当我们想要将全局环境保存到磁盘时,我们使用 save(list = ls(.GlobalEnv), file = "data.Rdata") - 好的。 当需要保存一个特定对象时,我们使用 save(
我想将数据保存到 .RData 文件中。 例如,我想将两个 csv 文件和一些信息保存到 1.RData 中。 这里,我有两个 csv 文件 1) file_1.csv contains object
我有一个 RData 文件,它变得太大,无法使用 load() 加载到我的计算机上。命令。它包含一个包含约 300 万个观测值和约 100 个变量的数据框。 我想要 加载文件,也许使用一些 bigda
我正在尝试保护我保存在 R 中的一些数据文件。有没有办法用密码保护 R 数据文件 (.Rdata) ? 谢谢 最佳答案 在同一脚本中创建文件后,您可以调用 GnuPG 以使用公钥加密来加密文件。这将另
我有一个函数,我必须将数据集传递给它。 loading <- function(dataset){ merchants <- load(dataset) return(merchants) } 但是当
当加载 .RData 文件时,每次都会生成相同的随机数。例如试试这个:(在终端中输入这些) rm(list=ls()) x=10 #Just some random value save.image(
我正在尝试将指定目录中所有 .RData 文件的data frame 对象的数据加载到单个数据表。这就是我尝试这样做的方式: library(data.table) fileList str(dat
我是 R 的新手,我正在尝试将 .Rdata 格式文件转换为逗号分隔的文本文件格式。有人可以帮我解决这个问题吗? 最佳答案 load("yourData.RData") ls() #returns a
我有一个包含各种对象的Rdata文件: New.Rdata |_ Object 1 (e.g. data.frame) |_ Object 2 (e.g. matrix) |_...
我必须加载 isfar.RData 文件才能将其用于其他计算(此处描述并不重要)。我想简单地看看 isfar.RData 文件中的数据如何,例如它携带什么数字、列、行。 首先我加载我的文件: isfa
我有一个矢量 a=0.01 然后我创建一个 mat a = 1 > get('a') [1] 1 与save一起使用: to_be_saved_obj = paste("mat", a, sep =
我发现自己需要更新之前使用 save 创建的 Rdata 文件中的一两个数据对象。如果我不小心加载文件,我可能会忘记重新保存文件中的一些对象。举个例子,我正在开发一个包,其中包含一些存储在 sysda
如果您尝试将任何数据集保存到“PRN.rData”,您将收到错误消息: d<- data.frame(D=NA, K=NA) save(d, file="E:/PRN.rData") Error in
我是一名优秀的程序员,十分优秀!