簡體   English   中英

AES128 加密 CBC/NoPadding Objective-C

[英]AES128 Encryption CBC/NoPadding Objective-C

我們需要在 Android 和 IOS 中使用 AES128 加密請求,然后在用 Java 編寫的后端服務器中發送該加密消息。

我們的安卓加密代碼如下:

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);

其中 keyspec 和 ivspec 是生成的隨機字節。

在 Objective-C 中,這就是我們進行加密的方式。

NSString* iv = @"a12bc1256b4de9a0";
NSData* ivData = [iv dataUsingEncoding:NSUTF8StringEncoding]; 


NSMutableData* cipherData = [NSMutableData dataWithLength:data.length+kCCBlockSizeAES128];

CCCryptorStatus result = CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding, keyData.bytes, keyData.length, ivData.bytes, data.bytes, data.length, cipherData.mutableBytes, cipherData
                                     .length, &outLength);

這樣做的問題是,當我們比較 Java 程序和 Objective-C 的加密字節時,它們是不一樣的。 我知道 Objective-C 中的 CCOption 參數應該是 CBC 但這不在 CommonCrypto 庫的枚舉列表中。 當我們將其設置為 0 時,加密字節僅返回一系列零。

請建議有關如何使用 AES/CBC/NOPadding 算法在 Objective-C 中進行 AES 128 加密的其他替代方案。

您已請求填充: kCCOptionPKCS7Padding 這與 Java 的NoPadding 刪除填充選項。 (您可以使用 0 表示“沒有選項”。)

還不清楚您的加密的所有其他部分是否相同。 您沒有在 Java 代碼中包含密鑰生成或 IV。

(請注意,如果您從同一消息的加密算法中獲得完全相同的字節,那么您正在以不安全的方式使用加密算法。安全加密結構將為每次加密生成不同的密文。我了解您的服務器可能正在使用這種不安全的方法;這是一個非常常見的錯誤。但它是不安全的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM