簡體   English   中英

將AES加密從Java移植到Objective-C

[英]Porting AES Encryption from Java to Objective-C

我的任務是將AES加密從Java移植到Objective-C。 我無法訪問發生解密的服務器代碼。 使用FBEncryptor ,我設法在Objective-C中對字符串進行了簡單的AES加密,並在Java中對其進行了解密,反之亦然。

但是,當我嘗試將Objective-C中的加密數據發送到服務器(同樣,我無權訪問)時,服務器向我發送了“ DER輸入而不是八位字節串”錯誤。 我發現這段代碼是Java語言,無法在保持成功的道路上的Objective-C中復制。

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, sKey);
String ivBase64 = Base64.encodeBytes(cipher.getParameters().getEncoded());

ivBase64與加密的字符串一起發送到服務器。

非常感謝您提供有關如何將cipher.getParameters().getEncoded()到Objective-C的任何幫助。

謝謝。

發生的是, cipher.getParameters()調用返回AlgorithmParameters的實例。 該實例具有方法getEncoded() ,該方法具有以下描述:

以其主要編碼格式返回參數。 如果存在針對此類參數的ASN.1規范,則參數的主要編碼格式為ASN.1。

現在,據我所知,沒有用於IV的默認ASN.1 DER編碼,但是由於IV基本上是字節數組,因此最合乎邏輯的ASN.1編碼是OCTET STRING。 當進行DER編碼時,此ASN.1類型的標簽具有值04h和長度。 該長度將始終是直接編碼為單個字節的IV的大小。 IV將始終具有基礎密碼的塊大小,對於AES而言始終為16個字節。

因此,最后,您可以通過在IV前面附加值04h10h來確定。

暫無
暫無

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

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