2012-12-19 25 views
0

我有java代碼加密密碼,目標C AES加密等於Java版本

public static String encryptToString(String content,String password) throws IOException { 
    return parseByte2HexStr(encrypt(content, password)); 
} 
private static byte[] encrypt(String content, String password) { 
    try { 
     KeyGenerator kgen = KeyGenerator.getInstance("AES"); 
     SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG"); 
     secureRandom.setSeed(password.getBytes()); 
     kgen.init(128, secureRandom); 
     SecretKey secretKey = kgen.generateKey(); 
     byte[] enCodeFormat = secretKey.getEncoded(); 
     SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); 
     Cipher cipher = Cipher.getInstance("AES"); 
     byte[] byteContent = content.getBytes("utf-8"); 
     cipher.init(Cipher.ENCRYPT_MODE, key); 
     byte[] result = cipher.doFinal(byteContent); 
     return result; 
    } catch (Exception e) { 
     log.error(e.getMessage(),e); 
    } 
    return null; 
} 
public static String parseByte2HexStr(byte buf[]) { 
    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < buf.length; i++) { 
     String hex = Integer.toHexString(buf[i] & 0xFF); 
     if (hex.length() == 1) { 
      hex = '0' + hex; 
     } 
     sb.append(hex.toUpperCase()); 
    } 
    return sb.toString(); 
} 

現在我需要加密/用Objective-C的解密,我做了很多的搜索,沒有方法將生成相同的加密輸出。
什麼是與java代碼相等的objective-c版本代碼?

測試用例:encryptToString(「測試」,「密碼」)=> DA180930496EC69BFEBA923B7311037A

回答

1

我認爲這個問題的答案是,你在找什麼:Any cocoa source code for AES encryption decryption?

我適應功能某人發佈作爲回答:https://gist.github.com/4335132

要使用:

NSString *content = @"test"; 
NSData *dataToEncrypt = [content dataUsingEncoding:NSUTF8StringEncoding]; 
NSData *data = [dataToEncrypt AES128EncryptWithKey:@"password"]; 
NSString *hex = [data hexString]; 

這不是完全相同相同,因爲你的Java代碼不使用密碼本身進行加密,而是使用它來種子隨機數生成器。但我認爲這應該仍然適用於您正在嘗試做的事情。

+0

不,你有沒有檢查它? – xfx

+0

是的,它顯示了CommonCrypto中的AES功能是如何工作的。憑藉此知識,您可以輕鬆地將您的Java代碼轉換爲Objective-C。 – Cocoanetics

+0

是的,如果我用java版本指定相同的關鍵字節,這個工作正常,現在的問題是如何生成/計算正確的關鍵。 – xfx