iOS 개발 복호화 알고리즘 - 기초 편 (2)
1. AES 암호 화 알고리즘
1. 도 모 는 고급 암호 화 기준 (영어: Advanced Encryption Standard, 줄 임 말: AES) 은 암호학 에서 Rijndael 암호 화 법 이 라 고도 부 르 는데 미국 연방정부 가 사용 하 는 블록 암호 화 기준 이다.이 기준 은 기 존의 DES 를 대체 하 는 데 사용 되 었 으 며, 이미 다방면으로 분석 되 어 전 세계 적 으로 널리 사용 되 고 있다.5 년 간 의 선별 절 차 를 거 쳐 고급 암호 화 기준 은 미국 국가 표준 기술 연구원 (NIST) 이 2001 년 11 월 26 일 FIPS PUB 197 에 발 표 했 고 2002 년 5 월 26 일 에 유효한 기준 이 되 었 다.2006 년 에 고급 암호 화 기준 은 대칭 키 암호 화 에서 가장 유행 하 는 알고리즘 중 하나 가 되 었 다.구체 적 인 암호 화 원 리 는 자세히 따 지지 않 고 응용 층 에서 직접 말한다.암호 화 복호화 원리 에 관심 이 있 으 시 면 참고 하 시기 바 랍 니 다.http://www.mamicode.com/info-detail-514466.html
2. 응용 장면
1. AES 는 대칭 암호 화 알고리즘 으로 단일 키 암호 화 시스템 의 암호 화 방법 을 사용 하 는데 같은 키 는 정보의 암호 화 와 복호화 로 동시에 사용 할 수 있 는데 이런 암호 화 방법 을 대칭 암호 화 라 고 한다.장점 은 알고리즘 이 공개 되 고 계 산 량 이 적 으 며 암호 화 속도 가 빠 르 고 암호 화 효율 이 높다 는 것 이다.단점 은 데이터 전송 전에 발송 자 와 수신 자 는 반드시 비밀 키 를 협의 하여 쌍방 이 비밀 키 를 잘 저장 할 수 있 도록 해 야 한 다 는 것 이다.그 다음 에 한 측의 비밀 키 가 누설 되면 암호 화 정보 도 안전 하지 않다.또한 사용자 가 대칭 암호 화 알고리즘 을 사용 할 때마다 다른 사람 이 모 르 는 유일한 비밀 키 를 사용 해 야 하기 때문에 쌍방 이 가지 고 있 는 열 쇠 를 받 거나 보 내 는 수량 이 많 고 키 관 리 는 쌍방의 부담 이 될 수 있 습 니 다.2. 일반적인 응용 프로그램 은 Base 64 와 함께 긴 텍스트 를 암호 화하 거나 문자열 을 암호 화 하 는 것 입 니 다. 데이터 와 텍스트 가 전송 과정 에서 다른 사람 에 게 차단 되 지 않 고 명문 으로 볼 수 있 도록 보장 합 니 다. 우리 프로젝트 의 응용 프로그램 은 모든 텍스트 파일 을 암호 화하 여 다른 사람 이 우리 가 존재 하 는 로 컬 파일 을 직접 가 져 오 면 바로 볼 수 있 도록 하 는 것 입 니 다.
3. 알고리즘
1. 보통 AES 는 128 비트 또는 256 비트 암호 화 알고리즘 을 사용 하 는데 비밀 키 문자 의 숫자 는 하 나 는 16 비트 이 고 하 나 는 32 비트 이다.우리 가 채택 한 것 은 256 이다.2. 암호 화 알고리즘:
- (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 + 100;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES,
kCCOptionPKCS7Padding | kCCOptionECBMode,
keyPtr, kCCKeySizeAES256,
NULL,
[self bytes], dataLength,
buffer, bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess)
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}
// 16
- (NSString *)AES256EncryptWithKeyString:(NSString *)key
{
// NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
NSData *decry = [self AES256EncryptWithKey:key];
NSString *descryStr = [[NSString alloc] initWithData:decry encoding:NSUTF8StringEncoding];
return descryStr;
}
3. 복호화 알고리즘
- (NSData *)AES256DecryptWithKey:(NSString *)key //
{
char keyPtr[kCCKeySizeAES256 + 1];
bzero(keyPtr, sizeof(keyPtr));
BOOL suc = [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
if (!suc) return [NSData data];
NSUInteger dataLength = [self length];
size_t bufferSize = dataLength + 100;
void *buffer = malloc(bufferSize);
// size_t numBytesEncrypted = 0;
// , , 32
// const void *keyPtr2 = [key bytes];
// char (*keyPtr)[32] = keyPtr2;
//
// // ,
// //
// NSUInteger dataLength = [self length];
// size_t bufferSize = dataLength + 32;
// void *buffer = malloc(bufferSize);
//
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES,
kCCOptionPKCS7Padding/* PKCS7Padding */ | kCCOptionECBMode,
keyPtr, kCCKeySizeAES256,
NULL,/* ( ) */
[self bytes], dataLength,/* */
buffer, bufferSize,/* */
&numBytesDecrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer);
return nil;
}
//
- (NSString *)AES256DecryptWithKeyString:(NSString *)key
{
if(self){
NSData *decry = [self AES256DecryptWithKey:key];
NSString *descryStr = [[NSString alloc] initWithData:decry encoding:NSUTF8StringEncoding];
return descryStr;
}
else{
return @"";
}
}
실제 사용 중 호출 방법 을 사용 하면 된다.데모 주소
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.