Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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
Swift 何塞加密机返回零_Swift_Jose - Fatal编程技术网

Swift 何塞加密机返回零

Swift 何塞加密机返回零,swift,jose,Swift,Jose,我正在使用。当我使用Encrypter方法时,它返回nil,没有任何错误的详细信息。下面是我的代码示例。任何人都可以帮助说明为什么加密机方法返回nil 意图:我正在尝试将包装密钥设置为我的JWE对象,从JOSESwift我可以理解加密机接受了那个cek密钥 // Jose implementation. let joseHeader = JWEHeader(algorithm: .direct, encrypt

我正在使用。当我使用Encrypter方法时,它返回
nil
,没有任何错误的详细信息。下面是我的代码示例。任何人都可以帮助说明为什么加密机方法返回
nil

意图:我正在尝试将包装密钥设置为我的JWE对象,从JOSESwift我可以理解加密机接受了那个cek密钥

// Jose implementation.
        let joseHeader = JWEHeader(algorithm: .direct,
                                   encryptionAlgorithm: .A128CBCHS256)
        let joseEncrypter = Encrypter(keyEncryptionAlgorithm: .RSAOAEP,
                                      encryptionKey: cekKeyData,
                                      contentEncyptionAlgorithm: .A128CBCHS256)!
        let josePayload = Payload(Data(base64Encoded: jsonString)!)

        let joseJWE = try? JWE(header: joseHeader, payload: josePayload, encrypter: joseEncrypter)

我怀疑您传递了错误的密钥类型,或者错误地选择了
.rsoaep
作为算法,意思是
.direct

///   - key: The key used to perform the encryption. If the `keyEncryptionAlgorithm` is `.direct`, the
///          `encryptionKey` is the shared symmetric content encryption key. Otherwise the `encryptionKey` is the
///           public key of the receiver. See [RFC-7516](https://tools.ietf.org/html/rfc7516#section-5.1) for
///           details.
nil
仅在以下情况下从给定的传递参数返回:

switch (keyEncryptionAlgorithm, contentEncyptionAlgorithm) {
case (.RSA1_5, .A256CBCHS512), (.RSAOAEP, .A256CBCHS512), (.RSAOAEP256, .A256CBCHS512), (.RSA1_5, .A128CBCHS256), (.RSAOAEP, .A128CBCHS256), (.RSAOAEP256, .A128CBCHS256):
    guard type(of: key) is RSAEncrypter.KeyType.Type else {
        return nil
    }
    // ...

这表示
cekKeyData
不是rsacencrypter.KeyType类型。我怀疑这是生成的AES密钥。

我怀疑您传递了错误的密钥类型,或者错误地选择了
.rsoaep
作为您的算法,意思是
.direct

///   - key: The key used to perform the encryption. If the `keyEncryptionAlgorithm` is `.direct`, the
///          `encryptionKey` is the shared symmetric content encryption key. Otherwise the `encryptionKey` is the
///           public key of the receiver. See [RFC-7516](https://tools.ietf.org/html/rfc7516#section-5.1) for
///           details.
nil
仅在以下情况下从给定的传递参数返回:

switch (keyEncryptionAlgorithm, contentEncyptionAlgorithm) {
case (.RSA1_5, .A256CBCHS512), (.RSAOAEP, .A256CBCHS512), (.RSAOAEP256, .A256CBCHS512), (.RSA1_5, .A128CBCHS256), (.RSAOAEP, .A128CBCHS256), (.RSAOAEP256, .A128CBCHS256):
    guard type(of: key) is RSAEncrypter.KeyType.Type else {
        return nil
    }
    // ...

这表示
cekKeyData
不是rsacencrypter.KeyType类型。我怀疑它是生成的AES密钥。

它返回nil,因为您使用了
try?
。如果您将其切换到
try
,它抛出的错误将告诉您问题所在
try?
特别告诉Swift扔掉错误,只返回nil。方法加密程序返回nil,但没有对其进行任何尝试。它返回nil,因为您使用了
try?
。如果您将其切换到
try
,它抛出的错误将告诉您问题所在
try?
特别告诉Swift扔掉错误,只返回nil。方法加密程序返回nil,但没有对其进行任何尝试。cekKeyData是从ECDHSecret创建的共享密钥。我正试图将WrappingKey设置为我的JWE,这是我这样做的初衷。请帮助。如果其AES密钥不支持此操作,那么JOSESwift是否不支持此操作?您已请求加密程序使用RSOAEP加密,然后向其传递了AES密钥。如果要使用RSA-OAEP进行包装,则需要向其传递一个RSA密钥。如果您使用的是共享机密,那么我不明白您为什么还要使用RSA-OAEP。共享秘密是“直接”加密,不需要密钥包装。我对约瑟夫特并不特别熟悉;我通常使用cjose。我认为你的答案对于我所问的问题是正确的。我传递的密钥肯定不是AESEncypter.KeyType这就是返回nil的原因。我现在需要弄清楚我传递给代码的密钥类型是什么。答案是肯定的。我所尝试的是在JOSE Swift上使用EC密钥,目前不受支持。这就是加密程序返回nil的原因。cekKeyData是从ECDHSecret创建的共享密钥。我正试图将WrappingKey设置为我的JWE,这是我这样做的初衷。请帮助。如果其AES密钥不支持此操作,那么JOSESwift是否不支持此操作?您已请求加密程序使用RSOAEP加密,然后向其传递了AES密钥。如果要使用RSA-OAEP进行包装,则需要向其传递一个RSA密钥。如果您使用的是共享机密,那么我不明白您为什么还要使用RSA-OAEP。共享秘密是“直接”加密,不需要密钥包装。我对约瑟夫特并不特别熟悉;我通常使用cjose。我认为你的答案对于我所问的问题是正确的。我传递的密钥肯定不是AESEncypter.KeyType这就是返回nil的原因。我现在需要弄清楚我传递给代码的密钥类型是什么。答案是肯定的。我所尝试的是在JOSE Swift上使用EC密钥,目前不受支持。这就是加密程序返回nil的原因。