iOS Objective-C PBEWithMD5AndDES 암호화

3089 단어
참조 출처:https://stackoverflow.com/questions/7152995/pbewithmd5anddes-encryption-in-ios
성명:이것은 저의 작업(몰아가기)수요(올리기)요(올리기)입니다.oc접촉한 지 보름도 안 된 상황에서 완성한 것입니다.어떤 잘못이 있으면 양해해 주시고 지적을 환영합니다

본문


잔말 말고 바로 코드에 올리시오
#include 
#include 


+(NSData*) cryptPBEWithMD5AndDES:(CCOperation)op usingData:(NSData*)data withPassword:(NSString*)password andSalt:(NSData*)salt andIterating:(int)numIterations {
    unsigned char md5[CC_MD5_DIGEST_LENGTH];
    memset(md5, 0, CC_MD5_DIGEST_LENGTH);
    NSData* passwordData = [password dataUsingEncoding:NSUTF8StringEncoding];

    CC_MD5_CTX ctx;
    CC_MD5_Init(&ctx);
    CC_MD5_Update(&ctx, [passwordData bytes], [passwordData length]);
    CC_MD5_Update(&ctx, [salt bytes], [salt length]);
    CC_MD5_Final(md5, &ctx);

    for (int i=1; i

직접 Stackoverflow에서 벗겨낸 코드입니다.Java 부분 코드는 JAVA 복호화 14 - 대칭 암호화 알고리즘 - PBE 알고리즘 (K1024 참조)

단순 테스트

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSString *dataStr = @"hello, world";
        NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
        NSData *salt = [@"salt" dataUsingEncoding:NSUTF8StringEncoding];
        //   
        NSData *encryptData = [test cryptPBEWithMD5AndDES:(kCCEncrypt) usingData:data withPassword:@"passwd" andSalt:salt andIterating:20];
        NSLog(@"%@", encryptData);
        
        //  
        NSData *decryptData=[test cryptPBEWithMD5AndDES:(kCCDecrypt) usingData:encryptData withPassword:@"passwd" andSalt:salt andIterating:20];
        NSLog(@"%@", decryptData);
        
        NSLog(@"text:%@",[[NSString alloc] initWithData:decryptData encoding:NSUTF8StringEncoding]);
    }
    return 0;
}

출력
2019-02-27 20:49:43.566299+0800 OcDemo[5046:282195] <99ffe825 57031ab9 980bfb8e 33baefc1>
2019-02-27 20:49:43.566527+0800 OcDemo[5046:282195] <68656c6c 6f2c2077 6f726c64>
2019-02-27 20:49:43.566580+0800 OcDemo[5046:282195] text:hello, world
Program ended with exit code: 0

몇 가지 주의

  • 매개 변수 중numIterations는 교체 횟수이며 암호화 해독은 일치해야 합니다.
  • 자바와 조금 다른 것은 oc에서 NSData는 16진수를 표시하고 자바에서byte는 기호수가 있기 때문에 마이너스가 발생하는 경우다.따라서 다르지 않다. 단지 전시 문제일 뿐이다. 실제 자바에서 대응하는 16진법의 무기호 전시는oc의 결과와 같고 스스로 변환 대비를 할 수 있다(부호화 10진법의 규칙에 주의한다).
  • 인터넷에서salt가 128보다 크면 안 된다고 할 수 있다. 이유는 바로 내가 위에서 말한 것이고 실제로는 영향이 없다.보여준 데이터는 다르지만 (자바는 마이너스,oc는 정수) 밑바닥의 이진 표현은 일치하기 때문에 최종 복호화에 영향을 주지 않는다.
  • 좋은 웹페이지 즐겨찾기