![](/img/trans.png)
[英]Objective-c AES encryption doesn't look like java AES encryption
[英]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前面附加值04h
和10h
來確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.