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
'source' 카테고리의 다른 글
오류 1366: 마리아에 문자열을 삽입할 때 잘못된 문자열 값DB (0) | 2023.06.06 |
---|---|
python 내에서 bash 스크립트 실행 중 (0) | 2023.06.01 |
NSTime 변환 방법간격(초)(분) (0) | 2023.06.01 |
루비에서 배열을 해시로 변환하는 가장 좋은 방법은 무엇입니까? (0) | 2023.06.01 |
iPhone의 NS 문자열에서 HTML 태그 제거 (0) | 2023.06.01 |