当前位置: 首页 > 知识库问答 >
问题:

iOS加密包AES-GCM是否可以使用少于12字节的nonce?

长孙正卿
2023-03-14

我正在尝试与一个使用AES-GCM的现有设备进行接口,该设备具有4字节的nonce(UInt32)。这是一个简单的增量计数器,每次发生操作时都会增加:

var cryptoCounter: UInt32 = 0
let key = SymmetricKey(data: sharedKey) // This is a 32-byte key.
let nonceData = withUnsafeBytes(of: cryptoCounter.bigEndian, Array.init) // Convert UInt32 to 4-byte data.
let nonce = try! AES.GCM.Nonce(data: Data(nonceData)) // This throws an invalid parameter size exception.
let encrypted = try! AES.GCM.seal(serialized, using: key, nonce: nonce)
let nonceData = [0, 0, 0, 0, 0, 0, 0, 0] + withUnsafeBytes(of: cryptoCounter.bigEndian, Array.init)

共有1个答案

陈斌蔚
2023-03-14

我想出了一个对我有效的解决办法。

我使用了优秀的CryptoSwift库(在撰写本文时,GitHub上有7.8k颗星):

let gcm = GCM(iv: withUnsafeBytes(of: cryptoCounter.bigEndian, Array.init), mode: .detached)
let aes = try! AES(key: [UInt8](sharedKey), blockMode: gcm, padding: .noPadding)
let encrypted = try! aes.encrypt([UInt8](serialized))
 类似资料:
  • 我正在iOS上使用加密/解密我的机密密钥,并将其保存在中。已成功设置并加密数据。但是每当我试图解密数据时,它都会给我以下错误: Error domain=nsosstatuserrordomain code=-50\“ecies:未能到aes-gcm解密数据\”userinfo={nsdescription=ecies:未能到aes-gcm解密数据} 此外,在10.3中,使用KseckeyAlgo

  • 我正在尝试用AES解密来解密一个Base64Encoded字符串消息。 从输入中提取IV和加密文本 使用IV和相同的密码短语生成用于加密文本的密钥。密钥生成应遵循以下相同的步骤。 生成PBE密钥(256位) 用法: 任何线索将非常感谢,我想知道我是否错过了一些配置或数据转换时,试图转换在SWIFT。

  • 我正在使用C#在客户机/服务器应用程序中执行一些加密方法。NET框架和PHP。加密方法是AES-256-GCM,在PHP中非常简单。这个NET代码,我从这里复制了一些修改。这个NET版本产生了不同的值。 在PHP版本中,我可以这样写 在C#中,我试图使其保持一致 编辑: 所有方法都包括在内。 这个问题不是重复的

  • 我使用AES方法对从txt文件调用的sentance进行加密。我使用了GCM模式并创建了一个特定的密钥。一切都在工作(代码如下)。 我尝试实现解密过程,也就是说,我只有密钥(HexMyKeyvalue)和加密消息(HexEncryptedOriginalMessage value)并且我想对其进行解密。但问题是我错过了一些东西... 我写了下面的代码,但我有错误消息。 TypeError:decr