1
我是xcode中的新成員。我正在加密xcode中的字符串,並使用AES 256位加密Java中的相同字符串,並且看到一些奇怪的問題。在Java和iPhone的加密不相互匹配我用下面的代碼:我如何使xcode加密的字符串與java中的加密字符串相同
NSString *password = @"mypassword";
NSString *str = @"message";
NSLog(@"encrypting string =%@",str);
NSData *data = [str dataUsingEncoding: NSASCIIStringEncoding];
NSData *encryptedData = [data AES256EncryptWithKey:password];
NSString *responseString = [[NSString alloc] initWithData:encryptedData encoding:NSASCIIStringEncoding];
[Base64 initialize];
NSString *b64EncStr = [Base64 encode:encryptedData];
NSLog(@"Base 64 encoded = %@",b64EncStr);
NSData *b64DecData = [Base64 decode:b64EncStr];
NSData *decryptedData = [b64DecData AES256DecryptWithKey:password];
NSString* decryptedStr = [[NSString alloc] initWithData:decryptedData encoding:NSASCIIStringEncoding];
NSLog(@"decrypted string = %@",decryptedStr);
/////////////////************///////////////***************************/////////////////////
- (NSData *)AES256EncryptWithKey:(NSString *)key {
char keyPtr[kCCKeySizeAES256 + 1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr)
encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL ,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if(cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer
length:numBytesEncrypted]; }
>free(buffer);
>return nil; }
- (NSData *)AES256DecryptWithKey:(NSString *)key {
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr)
encoding:NSUTF8StringEncoding];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmAES128, kCCOptionPKCS7Padding,
keyPtr, kCCKeySizeAES256,
NULL ,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesDecrypted);
if(cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer
length:numBytesDecrypted]; }
free(buffer);
return nil; }
我用下面的代碼我正在對它進行加密
在Xcode但在Java中得到一個加密的字符串nd1+bWMbk+BEnr9uPIq2eQ==
SecretKeySpec spec = getKeySpec();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, spec);
BASE64Encoder enc = new BASE64Encoder();
String hexString = stringToHex(text);
>return enc.encode(cipher.doFinal(hex2byte(hexString)));
和加密的字符串是mCP+z7ZqxDWPoJPaPoVfSw==
我不能在java中找到完美的解決方案嗎?
請編輯您的文章並使用「代碼示例」按鈕而不是「bockquote」按鈕來格式化您的代碼。這是不可讀的。 –