如何仅通过DNS中的DKIM公钥计算密钥长度(比特数)
计算DKIM公钥的密钥长度(无需私钥)
步骤1:获取DKIM公钥的DNS记录
用dig命令查询目标域名的DKIM TXT记录,比如查询example.com的default selector:
dig +short default._domainkey.example.com TXT
输出会是类似v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0cOtPjzA...的字符串,你需要提取p=后面的base64编码内容(记得去掉所有空格和换行)。
步骤2:解析公钥并获取密钥长度
把提取到的base64公钥内容,通过管道传给openssl处理,直接输出密钥长度:
echo "这里替换成你提取的base64公钥" | base64 -d | openssl rsa -inform der -pubin -text -noout | grep "Public-Key"
执行后会得到类似Public-Key: (2048 bit)的结果,括号里的数字就是密钥的比特长度。
一键自动查询脚本(Debian环境用)
如果不想手动提取公钥,可以用这个脚本自动完成,替换SELECTOR和DOMAIN为你的目标值即可:
#!/bin/bash SELECTOR="default" DOMAIN="example.com" # 抓取DKIM记录并提取p字段的公钥 DKIM_PUB=$(dig +short ${SELECTOR}._domainkey.${DOMAIN} TXT | tr -d '"' | awk -F'p=' '{print $2}' | tr -d ' ') # 解析并输出密钥长度 echo "${DKIM_PUB}" | base64 -d | openssl rsa -inform der -pubin -text -noout | grep "Public-Key"
给脚本加执行权限:chmod +x dkim-key-check.sh,然后运行./dkim-key-check.sh就行。
跨平台适配
- BSD环境:把命令里的
base64 -d换成base64 -D,其余操作和Debian一致。 - Windows环境:用PowerShell实现,替换
$selector和$domain:$selector = "default" $domain = "example.com" $dkimRecord = Resolve-DnsName "${selector}._domainkey.${domain}" -Type TXT | Select-Object -ExpandProperty Strings $pubKey = ($dkimRecord -split 'p=')[1] -replace '\s','' $bytes = [Convert]::FromBase64String($pubKey) $rsa = [System.Security.Cryptography.RSA]::Create() $rsa.ImportSubjectPublicKeyInfo($bytes, [ref]$null) Write-Host "Public-Key: ($($rsa.KeySize) bit)"
内容的提问来源于stack exchange,提问作者Jan
相关产品推荐
相关产品推荐

