source

NSData를 문자열로 변환하시겠습니까?

lovecheck 2023. 6. 1. 22:50
반응형

NSData를 문자열로 변환하시겠습니까?

openssl 개인 키 EVP_PKEY를 ns 데이터로 저장하고 있습니다.이를 위해 아래 코드를 사용하여 바이트 스트림에 직렬화합니다.

unsigned char *buf, *p;
int len;
len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len); 
p = buf;
i2d_PrivateKey(pkey, &p);

여기서 pkey는 EVP_PKEY 유형입니다.그리고 버퍼 'p'의 바이트를 아래의 라인을 사용하여 NSData로 저장하고 있습니다.

NSData *keydata = [NSData dataWithBytes:P length:len];

지금은 아래 코드를 사용하여 NS 문자열로 변환하고 있지만 콘솔에 출력하면 다른 문자가 나타납니다.

NSString *content =[ NSString stringWithCString:[keydata bytes] encoding:NSUTF8StringEncoding];

누가 좀 도와주시겠어요?

기본적으로 EVP_PKEY를 sqlite 데이터베이스에 저장하고 싶습니다.

제가 옳은 길로 가고 있나요?감사해요.

목표-C

사용할 수 있습니다(NSString Class Reference 참조).

- (id)initWithData:(NSData *)data encoding:(NSStringEncoding)encoding

예:

NSString *myString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding];

비고: 참고:NSData값은 지정된 인코딩에 대해 유효해야 합니다(위 예제의 UTF-8). 그렇지 않으면nil반환 예정:

어떤 이유로 초기화가 실패한 경우(예: 데이터가 인코딩에 유효한 데이터를 나타내지 않는 경우) 0을 반환합니다.

Swift 3.0 이전 버전

String(data: yourData, encoding: NSUTF8StringEncoding)

Swift 3.0 이후 버전

String(data: yourData, encoding: .utf8)

String #init(data:encoding:) 참조

Swift 3.0 이전 버전:

String(data: yourData, encoding: NSUTF8StringEncoding)

Swift 4.0의 경우:

String(data: yourData, encoding: .utf8)

나는 당신의 "P"를 dataWithBytes 매개변수로 믿습니다.

NSData *keydata = [NSData dataWithBytes:P length:len];

"buf"여야 합니다.

NSData *keydata = [NSData dataWithBytes:buf length:len];

i2d_PrivateKey는 출력 버퍼 p에 대한 포인터를 버퍼 끝에 놓고 추가 입력을 기다리고 있으며 buf는 여전히 버퍼의 시작을 가리키고 있습니다.

다음 코드는 Pkey가 EVP_PKEY에 대한 포인터인 경우에 사용할 수 있습니다.

unsigned char *buf, *pp;
int len = i2d_PrivateKey(pkey, NULL);
buf = OPENSSL_malloc(len); 
pp = buf;
i2d_PrivateKey(pkey, &pp);

NSData* pkeyData = [NSData dataWithBytes:(const void *)buf length:len];
DLog(@"Private key in hex (%d): %@", len, pkeyData);

다음 명령을 사용하고 mypkey의 출력을 확인한 후 온라인 변환기를 사용하여 이진 데이터를 기본 64(http://tomeko.net/online_tools/hex_to_base64.php?lang=en) 로 변환하고 인증서 파일의 개인 키와 비교할 수 있습니다.펨:

openssl pkcs12 -in myCert.p12 -nocerts -nodes -out mypkey.pem

저는 답변을 위해 당신의 질문과 이 EVP 기능 사이트를 참조했습니다.

스위프트 5:

String(data: data!, encoding: String.Encoding.utf8)

스위프트 3:

String(data: data, encoding: .utf8)

임의의 NSData를 NSString으로 변환하는 간단한 방법은 base64 인코딩입니다.

NSString *base64EncodedKey = [keydata base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];

그런 다음 나중에 다시 사용할 수 있도록 데이터베이스에 저장할 수 있습니다.NSData로 다시 디코딩하면 됩니다.

언급URL : https://stackoverflow.com/questions/6428461/convert-nsdata-to-string

반응형