plus - iphone se




NSData স্ট্রিং রূপান্তর? (4)

আমি nsdata হিসাবে একটি opensl ব্যক্তিগত কী EVP_PKEY সংরক্ষণ করছি। এর জন্য আমি নীচের কোড ব্যবহার করে একটি বাইট স্ট্রিম মধ্যে serializing করছি

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

যেখানে কুকি টাইপ EVP_PKEY হয়। তারপর আমি নীচের লাইন ব্যবহার করে একটি NSData হিসাবে বাফার 'পি' থেকে বাইট সংরক্ষণ করছি

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

এখন আমি নীচের কোড ব্যবহার করে একটি NSString এ রূপান্তরিত করছি কিন্তু যখন আমি কনসোলে এটি মুদ্রণ করি তখন এটি অন্য কিছু অক্ষর দেয়।

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

কেউ সাহায্য করতে পারে?

মূলত আমি একটি sqlite ডাটাবেস মধ্যে EVP_PKEY সংরক্ষণ করতে চান

আমি কি সঠিক পথে আছি? ধন্যবাদ।


NSString থেকে ইচ্ছাকৃত এনএসডিটা রূপান্তরিত করার একটি সহজ উপায় বেস64 এনকোড করতে হয়।

NSString *base64EncodedKey = [keydata base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];

আপনি পরে আপনার পুনঃব্যবহারের জন্য এটি আপনার ডাটাবেস মধ্যে সংরক্ষণ করতে পারেন। শুধু NSData ফিরে এটি ডিকোড।


আমি বিশ্বাস করি আপনার তথ্য "পি" ডেটা উইথবাইট প্যারামিটার হিসাবে

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

"buf" হওয়া উচিত

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

যেহেতু i2d_PrivateKey পয়েন্টারটিকে বাফারের শেষে আউটপুট বাফার পিকে রাখে এবং আরও ইনপুটটির জন্য অপেক্ষা করে, এবং buf এখনও আপনার বাফারের শুরুতে নির্দেশ করছে।

নিম্নলিখিত কোডটি আমার জন্য কাজ করে যেখানে কkey একটি 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);

আপনি আপনার বাইনারি তথ্যটি বেস 64 ( http://tomeko.net/online_tools/hex_to_base64.php?lang=en ) রূপে রূপান্তরিত করতে এবং আপনার সার্টিফিকেট ফাইলে ব্যক্তিগত কমান্ডের সাথে নিম্নোক্ত কমান্ডটি ব্যবহার করার পরে এটি তুলনা করতে পারেন এবং mypkey.pem এর আউটপুট চেক করা হচ্ছে:

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

আমি আপনার প্রশ্নের জন্য আমার উত্তর এবং এই ইভিপি ফাংশন সাইট উল্লেখ।


সুইফ্ট 3:

String(data: data, encoding: .utf8)

উদ্দেশ্য গ

আপনি ব্যবহার করতে পারেন ( NSString ক্লাস রেফারেন্স দেখুন )

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

উদাহরণ:

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

মন্তব্য : অনুগ্রহ করে লক্ষ্য করুন যে NSData মূল্য অবশ্যই নির্দিষ্ট এনকোডিং (উপরের উদাহরণে UTF-8) এর জন্য বৈধ হতে হবে, অন্যথায় nil ফিরে আসবে:

সূচনা কিছু কারণে ব্যর্থ হয় (উদাহরণস্বরূপ, ডেটা এনকোডিংয়ের জন্য বৈধ ডেটা উপস্থাপিত না করে)।

পূর্বে সুইফট 3.0

String(data: yourData, encoding: NSUTF8StringEncoding)

সুইফ্ট 3.0

String(data: yourData, encoding: .utf8)

স্ট্রিং # ইনিট দেখুন (তথ্য: এনকোডিং :) রেফারেন্স







nsdata