Java Android PrivateKey到BouncyCastle PrivateKeyInfo?
我试图使用Bouncy/SpongyCastle的OAEP编码来解码一些包装好的数据。但是,用于初始化Java Android PrivateKey到BouncyCastle PrivateKeyInfo?,java,android,rsa,bouncycastle,spongycastle,Java,Android,Rsa,Bouncycastle,Spongycastle,我试图使用Bouncy/SpongyCastle的OAEP编码来解码一些包装好的数据。但是,用于初始化OAEPEncoding类的SpongyCastle API需要CipherParameters。在我的例子中,我试图使用AndroidPrivateKey打开一些东西,因此我假设我需要以某种方式将密钥转换为AsymmetricKeyParam,并将其粘贴到OAEPEncoding.init函数中。然而,我确实尝试过搜索类似的内容,但大多数示例都显示了通过执行getPrivate().getEn
OAEPEncoding
类的SpongyCastle API需要CipherParameters
。在我的例子中,我试图使用AndroidPrivateKey
打开一些东西,因此我假设我需要以某种方式将密钥转换为AsymmetricKeyParam
,并将其粘贴到OAEPEncoding.init
函数中。然而,我确实尝试过搜索类似的内容,但大多数示例都显示了通过执行getPrivate().getEncoded()
来初始化它。但是,Android不允许您获取原始私钥,因此我不确定如何实现这一点…编辑:我使用BC的OAEP类的原因是将OAEP与SHA-256一起使用。存储在Android密钥库中的关键材料不可访问。您可以使用这些键,但无法提取它们。这是一种安全限制
privateKey.getEncoded()
将始终为空,并且您将无法提取参数以使用SpongyCastle创建密钥
请参阅的安全功能
拔牙预防
Android密钥库密钥的密钥材料使用两种安全措施进行保护,以防止提取:
- 密钥材料永远不会进入应用程序进程。当应用程序使用Android密钥库密钥执行加密操作时,后台明文、密文和要签名或验证的消息将被发送到执行加密操作的系统进程。如果应用程序的进程遭到破坏,攻击者可能能够使用应用程序的密钥,但无法提取其密钥材料(例如,在Android设备之外使用)
如果您想使用OAEP,您需要自己创建并存储密钥,或者将安卓>=23“安卓私钥”表示您正在使用安卓密钥库生成密钥?是的,密钥位于安卓密钥库中。我只使用常规的Android API就可以将OAEP与SHA-1一起使用,但是,我无法将其与SHA-256一起使用,我现在正在尝试使用BC。是的,我理解这一点,但我认为我的问题实际上是使用BC API。我知道我无法获得原始密钥,我只是通过PrivateKey使用一个引用,但没有一个BC API接受Android PrivateKey。我确实在OAEP和SHA-256中使用了
密码,但是我得到了javax.crypto.IllegalBlockSizeException,原因是:android.security.KeyStoreException:Unknown error
,这并没有真正的帮助…我使用的代码:密码=Cipher.getInstance(“RSA/None/OAEPwithSHA-256和mgf1padding”);cipher.init(keyPair.getPrivate());返回cipher.doFinal(包装的_数据)
在.doFinal()
上抛出IllegalBlockSizeException
。这就是重点。不能将Android私钥与bouncycastle一起使用,因为要执行加密操作,它需要访问密钥参数,而实现不允许访问。Android密钥只能与AndroidKeystore加密providerAh一起使用,我明白了。。。在使用Android api时,您有什么想法可以解决异常问题吗?AndroidKeystore api应该可以工作<支持代码>RSA/ECB/OAEPTHESHA-1和MGF1填充
和RSA/ECB/OAEPTHESHA-256和MGF1填充
。下面是一个使用SHA256的示例