相关疑难解决方法(0)

在没有库的情况下用Java读取PKCS#1或SPKI公钥

我需要使用公共密钥来验证Java中的某些数据,但是我似乎无法以无需第三方插件就可以使用Java的方式来格式化密钥。

我正在使用Node.js的crypto库生成密钥,该库为我提供了PKCS#1或选项SPKI,以及.pem或.der文件格式。

我听说Java不支持PKCS#1开箱即用,并且StackOverflow上的几乎所有其他答案都建议使用BouncyCastle或类似工具,但就我而言,我正在编写一个SDK,并且根本负担不起使用库只是阅读此公钥。

因此,我目前正在读取.der格式的密钥,因为它省去了剥离PEM标头并从base-64解码密钥的麻烦。运行此命令时,出现错误:

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000be:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
Run Code Online (Sandbox Code Playgroud)

这就是我所拥有的(对不起,它在Kotlin,而不是标题所暗示的Java)

// Here's a key for convenience
val key = Base64.getDecoder().decode("MFUCTgF/uLsPBS13Gy7C3dPpiDF6SYCLUyyl6CFqPtZT1h5bwKR9EDFLQjG/kMiwkRMcmEeaLKe5qdj9W/FfFitwRAm/8F53pQw2UETKQI2b2wIDAQAB");

val keySpec = X509EncodedKeySpec(key)
val keyFactory = KeyFactory.getInstance("RSA")
val publicKey = keyFactory.generatePublic(keySpec) // error thrown here

val cipher = Cipher.getInstance("RSA/NONE/PKCS1Padding")
cipher.init(Cipher.DECRYPT_MODE, publicKey)
Run Code Online (Sandbox Code Playgroud)

目前,我最好的想法是在Node.js端安装一个库,以减少将问题导出为PKCS#8的麻烦,但我想我首先要检查是否丢失了任何东西。

java encryption public-key-encryption java-security

3
推荐指数
1
解决办法
1085
查看次数

Java Server 的 Swift RSA 加密公钥失败

我想创建公共密钥的base64RSA Private key使用Security框架。这是片段。

let tag = "com.example.keys.mykey"
public extension SecKey {
    static func generateBase64Encoded2048BitRSAKey() throws -> (private: String, public: String) {
        let type = kSecAttrKeyTypeRSA
        let attributes: [String: Any] =
            [kSecAttrKeyType as String: type,
             kSecAttrKeySizeInBits as String: 2048
        ]

        var error: Unmanaged<CFError>?
        guard let key = SecKeyCreateRandomKey(attributes as CFDictionary, &error),
            let data = SecKeyCopyExternalRepresentation(key, &error) as Data?,
            let publicKey = SecKeyCopyPublicKey(key),
            let publicKeyData = SecKeyCopyExternalRepresentation(publicKey, &error) as Data? else {
                throw error!.takeRetainedValue() as Error …
Run Code Online (Sandbox Code Playgroud)

rsa swift java-security

3
推荐指数
2
解决办法
1775
查看次数