Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从RSA公钥中提取数据_C#_Java_Php_Android_Cryptography - Fatal编程技术网

C# 从RSA公钥中提取数据

C# 从RSA公钥中提取数据,c#,java,php,android,cryptography,C#,Java,Php,Android,Cryptography,我正在进行一个项目,该项目涉及读取用于签署Android APK的公钥数据。我能够成功地将签名提取为公钥。当我查看由此生成的二进制pubkey文件时,我看到一些纯文本,例如名称和城市 我如何使用PHP(甚至Java或C#)安全地提取嵌入公钥中的姓名/城市信息?并希望这样做,我能确切地知道这些字段是什么(即,不是盲目地抓取文本,而是知道哪个字符串是城市,哪个是名称) 澄清一下:我没有私钥或证书文件。我目前对签名或加密任何东西都不感兴趣,我只想提取pubkey中的明文,而不使用像regex这样的笨拙

我正在进行一个项目,该项目涉及读取用于签署Android APK的公钥数据。我能够成功地将签名提取为公钥。当我查看由此生成的二进制pubkey文件时,我看到一些纯文本,例如名称和城市

我如何使用PHP(甚至Java或C#)安全地提取嵌入公钥中的姓名/城市信息?并希望这样做,我能确切地知道这些字段是什么(即,不是盲目地抓取文本,而是知道哪个字符串是城市,哪个是名称)

澄清一下:我没有私钥或证书文件。我目前对签名或加密任何东西都不感兴趣,我只想提取pubkey中的明文,而不使用像regex这样的笨拙方法

更新:这是我的一个APK中的一个示例(base64编码)公钥

MIICBzCCAXCgAwIBAgIES6KlazANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQGEwJVUzELMAkGA1UECBMCUkkxFTATBgNVBAcTDE5hcnJhZ2Fuc2V0dDEVMBMGA1UEAxMMQ29saW4gTydEZWxsMB4XDTEwMDMxODIyMTI1OVoXDTQ1MDMwOTIyMTI1OVowSDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlJJMRUwEwYDVQQHEwxOYXJyYWdhbnNldHQxFTATBgNVBAMTDENvbGluIE8nRGVsbDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAmPetcBW+ITURXY0LsI2ZfgM3R7K2kwicgpd0W+BYAXQBh76SXyN9MYvtfnUY3SNz37FW/lDQgAO3pbhEFqGwfADh2ctXlYmlE9DtcRQw0ojGVPIDlWBX+9IUxyL/89CPaN84R/1lvdosco4V0BqQYR300S9ZwmwFA2Vh9hSUZmsCAwEAATANBgkqhkiG9w0BAQUFAAOBgQBezKu4G11Z68NTPIBro8xsnbkdYxObzW7BsSr6t9MS5x6EQVs75R/nnKrsMcQ+9ImdT940jhQgZT3ZrYla5VhdbelxnLhBVbJfBdipV3Hv2bG7MnXzFqHYwQqYp+UrP8zWm1YHQf5I/P9VBjlkgwFyNKr0TxP4t/qS08oGX2wvZg==

在php中,我不确定,但可能是您的朋友。如果您正在使用证书,有许多与ssl相关的函数可能会派上用场。

您输入的字符串是一个base 64编码的x509证书,而不仅仅是一个公钥

您需要解析可分辨名称字段以获得所需的信息

下面是一个C#示例:

“由此生成的二进制公钥文件”是一个X.509证书

几乎任何平台都支持读取X.509证书,并从中创建一个结构,从中可以可靠地提取“主题名”,通常还可以提取包括电子邮件地址或主机名在内的扩展信息

例如,如果已安装OpenSSL,请使用以下命令:

openssl x509 -text -noout -inform der -in <yourfilehere>
opensslx509-text-noout-inform der-in
您可以使用其他选项提取特定字段。例如,添加
-subject
会产生:

主题=/C=US/ST=RI/L=Narragansett/CN=Colin O'Dell


你能举一个“由此产生的二进制公钥文件”的例子吗?使用Base-64编码将其转换为可发布文本。@FlyingStrudel-Regex在许多情况下肯定有用,但我认为它不适合此任务:P@erickson-员额已更新。我使用这个网站将其转换为二进制文件:您是否100%确定您的意思是说姓名/城市数据“嵌入到公钥中”?我敢打赌,您真正想要的是一个X509证书,它包含密钥和元数据。粘贴base64字符串:可能,但我只有公钥,没有完整的证书。我之前浏览了那个函数列表,但没有找到任何我想要的。也许我错过了什么?这很完美:)在被告知我实际上有一个证书后,我想出了一个类似的PHP解决方案,使用
$dataAsArray=openssl_x509_parse(openssl_x509_read($pemFormattedCertString)),转储数据
openssl x509 -text -noout -inform der -in <yourfilehere>