XXD转换无输出?如何将RSA公钥模数转URL安全Base64
解决RSA模数十六进制转URL安全Base64的问题
问题根源
你遇到的xxd无输出问题,大概率是输入的十六进制字符串包含换行、空格等非十六进制字符——xxd的-r -p模式会忽略非十六进制字符,但如果输入被分割成多行或夹杂空白,可能导致转换后的二进制数据为空/不完整,且xxd仍会返回0(无错误提示)。
修复后的Shell命令
直接修改原命令,加入清理非十六进制字符的步骤,同时生成符合要求的URL安全Base64:
openssl rsa -in Key.pem -noout -modulus | sed -e 's/Modulus=//' -e '/^$/d' -e 's/[[:space:]]//g' | xxd -r -p | openssl base64 -A | tr '+/' '-_' | tr -d '=' > KeyPairPubMod.b64
各部分作用:
sed -e 's/Modulus=//':移除前缀Modulus=-e '/^$/d':删除空行-e 's/[[:space:]]//g':清除所有空格、换行,确保十六进制字符串连续xxd -r -p:将纯十六进制字符串转为二进制openssl base64 -A:生成单行Base64(默认多行格式)tr '+/' '-_':替换为URL安全的Base64字符tr -d '=':移除末尾的填充等号(匹配你期望的结果格式)
验证你的测试数据
用你提供的十六进制字符串测试,可将字符串存入modulus.hex文件,然后执行:
cat modulus.hex | tr -d '\n' | xxd -r -p | openssl base64 -A | tr '+/' '-_' | tr -d '='
执行后会直接输出你期望的URL安全Base64字符串。
更可靠的Python方案
如果Shell工具的兼容性让你头疼,用Python脚本更直观:
import base64 # 替换为你的十六进制模数 hex_modulus = "9DDBBD4D44FE8A2263E2EBF1313D095EC77BE9826C6B06A4973464808E12DC91DC1B2F2A8DC52F2CA83A9E02D5508BC04687E1C9658A7DC679D7144589DE0BAAF09873340F098D303D7E88C71D7C2136E7C5EB785C853CAE248B39132CC4FD364AE77594991E6D9D205E7A8659E1707390B10F7238AC3C3D27103A5F3AFCE0588D2144AC981303C8DF9D3F8B6057D6B9E03942096C4D64E005F55047ED335167F1FDA409D0C96BBFF9B951A2AE2062C0591A646F79A96E47B469D372CCFCC479D92D84F0F0AED684F862E9DED9B6166EA9B2AF526096D9AFF31551EDA07D714CFD955EC1E1A0DE806E11C0ED16D38AAD3E6B3E4555CDA492117D072552DEC1BC3DA0232F35EF203C5A1F4EDEF7A85C17595DCB8E8BEFBA81804F37D58D02838F35E253C9E3D97815C1E01DE95C83F625C00254AC373B6EC15E1B36071F9486EAD0ACDF93D9AE9A8A3227041F3A8EA9D990E753A0F45B7AF89737B0A7D6A7A4C1680867EFA6311FA3A25FDFF34B5507BCF9D34B2B6069B3583ABC08B64270979D" binary_modulus = bytes.fromhex(hex_modulus) url_safe_b64 = base64.urlsafe_b64encode(binary_modulus).decode('utf-8').rstrip('=') print(url_safe_b64)
运行脚本即可直接得到目标结果,无需依赖Shell工具的参数细节。
内容的提问来源于stack exchange,提问作者hkc94501
相关产品推荐
相关产品推荐

