有关AES加密的问题
遇到一个项目,需要用AES加密密码,android的已经写好了,java源码:
private static final String AES_OPTIONS = "AES/ECB/PKCS5Padding"; private final static String CHARSET = "utf-8"; public static String encryptAES(String plain, String key) { try { Cipher cipher = Cipher.getInstance(AES_OPTIONS); cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key.getBytes(CHARSET), "AES")); return Base64.encodeToString( cipher.doFinal(plain.getBytes(CHARSET)), Base64.DEFAULT); } catch (Exception e) { e.printStackTrace(); return null; } }
然后,我这里也需要进行AES加密,加密的key我和android都是一样的,但是加密相同的"123456"却不一样,
正确的:xPUZM4ZE0UiRP4KN4y6IPg==
贴一下IOS AES加密代码:
//将string转成带密码的data + (NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key ;
#pragma mark - AES加密 //将string转成带密码的data +(NSString*)encryptAESData:(NSString*)string app_key:(NSString*)key { //将nsstring转化为nsdata NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; //使用密码对nsdata进行加密 NSData *encryptedData = [data AES128EncryptWithKey:key]; NSLog(@"加密后的字符串 :%@",[encryptedData base64EncodedString]); return [encryptedData base64EncodedString]; }
#import "NSData+AES.h"
#import <CommonCrypto/CommonCryptor.h>
#define gIv @"AES" //可以自行修改
-(NSData *)AES128EncryptWithKey:(NSString *)key {//加密
char keyPtr[kCCKeySizeAES128+1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCKeySizeAES128+1];
memset(ivPtr, 0, sizeof(ivPtr));
[gIv getCString:ivPtr maxLength:sizeof(ivPtr) 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|kCCOptionECBMode,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[self bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
在最底层的方法中:
-(NSData *)AES128EncryptWithKey:(NSString *)key {//加密
有个
gIv的参数,这里的
1、gIv一定要改成 java代码中的“AES”,
2、由于IOS没有填充算法 PKCS5Padding ,所以在IOS要这样写:kCCOptionPKCS7Padding|kCCOptionECBMode,
基本改动就是这样。

浙公网安备 33010602011771号