java - Android 上生成的不同 RSA 公钥

标签 java android openssl rsa spongycastle

我能够在我的 Java 桌面环境中生成一个公钥,我得到了这样的东西

Sun RSA public key, 1024 bits modulus: 101700973019391285593457598101942678753508114287289699162184623605939671495532511783006850112834969917970271633181351680298749946797462542179729127916916336425952724141383800466274935950042225686754068132826643586090512962724382324158485291344703936377718522573879330753020035687831145457530843148690890911921 public exponent: 65537

但是在 Android 设备上,当我将 key 作为字符串获取并使用 KeyFactory 生成公钥时,我得到了这个:

OpenSSLRSAPublicKey{modulus=90d3b5cefc50dc42828cee8d718876f7573b4c9287dddf808e73cb66266c2004165217f86d0f0192de0bb88b3aac2002303ee8b1c926e9bc54189a5ec5a12bb293df0b3c6ff2458a63098f712f0b72218ce301c38de3971ae8c6c646160a5e2e24dc07679e5a82ada1233ecf5eca3d0d1f483d1c9f059 a23deed537c670b70b1,publicExponent=10001}

按键不一致。我试过 SpongyCaSTLe。我仍然在 Android 上获得 OpenSSL 结果。

我错过了什么?

最佳答案

key 之间没有差异。一个以 base-16(十六进制)打印,而另一个以十进制打印。只需尝试以下代码以确保安全:

BigInteger bi = new BigInteger(
    "90d3b5cefc50dc42828cee8d718876f7573b4c9287dddf808e73cb66266c2004165217f86d0f0192de0bb88b3aac2002303ee8b1c926e9bc54189a5ec5a12bb293df0b3c6ff2458a63098f712f0b72218ce301c38de3971ae8c6c646160a5e2e24dc07679e5a82ada1233ecf5eca3d0d1f483d1c9f059a23deed537c670b70b1",
    16);
System.out.println(bi.toString(10));

结果将与您的非 OpenSSL key 相同。

此处发生的情况是,您的不同平台具有执行加密操作的不同加密提供程序。结果将是相同的,但会有一些小的特性会被注意到,例如,在调用 toString() 时。

关于java - Android 上生成的不同 RSA 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18916024/

相关文章:

java - 如何处理有时不使用某个特定变量的类

java - HttpURLConnection 响应不工作

android - 渐进式 Web 应用程序的预期启动体验是什么?

android - 通过代码将图层列表设置为 View 的背景

ubuntu - SSL:当我通过浏览器检查时,我得到了我购买的 godaddy 证书,但是当我使用 openssl 检查时,我得到了一个自签名证书?

java - 为什么此设置 Activity 的 onSharedPreferenceChanged 方法为空?

java - Java 中有用于哈希的 hexToString 实现方法吗?

android - 在 fragment 期间处理后退按钮键

ruby-on-rails - 无法安装 gems,因为 "undefined method ` invoke_with_build_args' for nil :NilClass"

java - 在Java中运行 'openssl req'命令?