Swift AES解密对颤振不起作用,什么编码?

Swift AES解密对颤振不起作用,什么编码?,swift,flutter,encryption,aes,Swift,Flutter,Encryption,Aes,我正在用Swift with way(使用Apple CryptoKit)在AES-256中加密一个文件: let jsonData = try Data(contentsOf: jsonPath) let skey = SymmetricKey(size: .bits256) let dataSkey = skey.withUnsafeBytes {Data(Array($0)).base64EncodedString()} print(dataSkey) //

我正在用Swift with way(使用Apple CryptoKit)在AES-256中加密一个文件:

    let jsonData = try Data(contentsOf: jsonPath)
    let skey = SymmetricKey(size: .bits256)
    let dataSkey = skey.withUnsafeBytes {Data(Array($0)).base64EncodedString()}
    print(dataSkey) // DeDGtpqvojYL32bIsEsaaXZITjJp4bAW7aQgtVYARO0=
    let aes = try AES.GCM.seal(jsonData, using: skey)
    try aes.combined!.write(to: encryptedPath)
    // UPLOAD FILE (encryptedPath) TO FIREBASE STORAGEs
然后,我尝试用pub以以下方式解密Flutter(.dart)中的文件:

import 'package:steel_crypt/steel_crypt.dart';

final File tmpFile = File(//path of file downloaded from storage firebase);
var aesEncrypter = AesCrypt('DeDGtpqvojYL32bIsEsaaXZITjJp4bAW7aQgtVYARO0=', 'gcm', 'pkcs7');
String decrypted = aesEncrypter.decrypt(tmpFile.readAsStringSync());
print(decrypted);
但我总是犯这样的错误:

FileSystemException:未能使用编码“utf-8”对数据进行解码, path=path.file.json“


我做错了什么?我尝试将swift中的文件编码到base64中,并使用base64在Flatter中再次读取,但没有成功。

您的密钥看起来像是在base64中编码的,所以您不会使用
密钥。fromBase64
构造函数吗?另外,CryptoKit不只是支持GCM吗?您需要在Dart中实现GCM。谢谢您的评论,我编辑了代码,现在使用GCM,但仍然会导致您试图将CryptoKit密封框作为字符串读取!这肯定行不通。是否记录了密封盒的内部格式?另外,您没有将IV传递给decrypt方法,但这不是直接的问题。似乎暗示
组合
的二进制形式将是
nonce | | | ciphertext | tag
。如果您不熟悉CryptoKit在后台的工作方式,您可能希望使用较旧的、较低级别的Apple crypto API,这样您就更有可能找到互操作性示例。您的密钥看起来像是在base64中编码的,所以您不会使用
密钥。fromBase64
构造函数吗?此外,CryptoKit不只是支持GCM吗?您需要在Dart中实现GCM。谢谢您的评论,我编辑了代码,现在使用GCM,但仍然会导致您试图将CryptoKit密封框作为字符串读取!这肯定行不通。是否记录了密封盒的内部格式?另外,您没有将IV传递给decrypt方法,但这不是直接的问题。似乎暗示
组合
的二进制形式将是
nonce | | | ciphertext | tag
。如果您不熟悉CryptoKit在幕后的工作方式,您可能希望使用较旧、较低级别的Apple CryptoAPI,这样您就更容易找到互操作性示例。