我真的真的..真的需要帮助.........
-更新-
我需要帮助,因为与iOS 3DES函数相比,我的java函数给我带来了不同的结果。我从ios和java都发布了代码;当指定的明文为“ tutor.1”且MD5密钥为“ spO13 + QLZCRAe93pIXMXLg ==“(显然,MD5两者相同)时,将返回结果。
JAVA 3DES (简短)
public static String encrypt(String plaintext, String enctoken){ if(enctoken == null) enctoken = "sfdjf48mdfdf3054"; String encrypted = null; byte[] plaintextByte = EncodingUtils.getBytes(plaintext,"UTF-8"); byte[] hash = Connessione.md5(enctoken); Log.i("ENCRYPT", "MD5: "+Base64.encodeToString(hash, 0)); try { Cipher cipher = Cipher.getInstance("DESEDE/ECB/PKCS5Padding"); SecretKeySpec myKey = new SecretKeySpec(hash,"DESede"); cipher.init(Cipher.ENCRYPT_MODE, myKey); try { byte[] encryptedPlainText = cipher.doFinal(plaintextByte); encrypted = Base64.encodeToString(encryptedPlainText, 0); Log.i("ENCRYPT", "Pwd encrypted: "+encrypted); return encrypted; } catch (IllegalBlockSizeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (BadPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvalidKeyException e) { // TODO Auto-generated catch block e.printStackTrace(); } return ""; }
结果: R4mXAaHcFxM =
iOS 3DES-再次更新
// key value in parameters is MD5 value! It is the same for both version + (NSString *) encrypt:(NSString *) dataToEncrypt withKey:(NSString*) key{ NSData *data = [dataToEncrypt dataUsingEncoding:NSUTF8StringEncoding]; NSData *mData = [key dataUsingEncoding:NSUTF8StringEncoding]; CCCryptorStatus ccStatus = kCCSuccess; // Begin to calculate bytesNeeded.... size_t bytesNeeded = 0; ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, kCCOptionECBMode | kCCOptionPKCS7Padding, [mData bytes], [mData length], nil, [data bytes], [data length], NULL, 0, &bytesNeeded); if(kCCBufferTooSmall != ccStatus){ NSLog(@"Here it must return BUFFER TOO SMALL !!"); return nil; } // .....End // Now i do the real Crypting char* cypherBytes = malloc(bytesNeeded); size_t bufferLength = bytesNeeded; if(NULL == cypherBytes) NSLog(@"cypherBytes NULL"); ccStatus = CCCrypt(kCCEncrypt, kCCAlgorithm3DES, kCCOptionECBMode | kCCOptionPKCS7Padding, [mData bytes], [mData length], nil, [data bytes], [data length], cypherBytes, bufferLength, &bytesNeeded); if(kCCSuccess != ccStatus){ NSLog(@"kCCSuccess NO!"); return nil; } return [Base64 encode:[NSData dataWithBytes:cypherBytes length:bufferLength]];
}
结果: YBAva5J2khY =
我需要iOS版本返回与Java版本相同的结果。
我在这里找到了Base64类:http : //www.imthi.com/blog/programming/iphone-sdk- base64-encode-decode.php
我做错了什么?
感谢您的帮助和时间
发现错误。keydata编码不同