दिलचस्प पोस्ट
jquery का उपयोग कर एक वेबसाइट का एक स्क्रीनशॉट उत्पन्न करना सीएसएस बनाम एचटीएमएल कैनवास के माध्यम से वेब पेज पर चलती छवि का प्रदर्शन सी # का उपयोग करते हुए एक टैब वर्ण को टेक्स्ट में डालना जेएसएफ़ पेज को j_security_check द्वारा संरक्षित किया गया है, तो देखेंएक्साइड अपॉक्सेसेशन अजाक्स अनुरोध पर नहीं फेंक दिया गया है भंडार के भाग के रूप में जीआईटी कॉन्फ़िग को संग्रहीत करना स्वयं हस्ताक्षरित प्रमाण पत्र स्वीकार करने के लिए इंटरनेट एक्सप्लोरर 8 प्राप्त करने के लिए मुझे क्या करना चाहिए? Clock_t प्रिंट करने के लिए printf का उपयोग करने का सही तरीका क्या है? एकत्रीकरण, संरचना और निर्भरता के बीच क्या अंतर है? सी # में सूची के पहले एन तत्वों को कैसे प्राप्त करें? अनग्रेड ग्राफ़ में सभी चक्र ढूंढना एक्सएमएल टू टेबल SQL सर्वर कन्वर्ट एंड्रॉइड में साझा पुस्तकालय लापता @ संश्लेषित इंस्टेंस चर की दृश्यता क्या है? रूक्रिप्ट तरीके पैकेज लोड नहीं करता है, आर करता है – क्यों, और इसके परिणाम क्या हैं? क्या मैं सिर्फ सीएसएस के उपयोग से बूटस्ट्रैप आइकॉन को रंग जोड़ सकता हूँ?

एईएस इंटरऑपरेबिलिटी नेट एंड आईफ़ोन के बीच?

मुझे आईफोन पर एक स्ट्रिंग एन्क्रिप्ट करने और डिक्रिप्शन के लिए नेट वेब सेवा पर भेजना होगा। मैं आईफोन पर एन्क्रिप्ट / डिक्रिप्ट करने में सक्षम हूं और नेट के साथ, लेकिन आईफोन से एन्क्रिप्टेड स्ट्रिंग को नेट द्वारा डिक्रिप्ट नहीं किया जा सकता है। मुझे मिल रही त्रुटि "पैडिंग अमान्य है और इसे हटाया नहीं जा सकता है।"

नेट कोड है: http://blog.realcoderscoding.com/index.php/2008/07/dot-net-encryption-simple-aes-wrapper/

आईफोन कोड से नमूना कोड का उपयोग किया जाता है: http://nootech.wordpress.com/2009/01/17/symmetric-encryption-with-the-iphone-sdk/

AFAIK मेरी कुंजी सेटिंग्स समान हैं:

result.BlockSize = 128; // iPhone: kCCBlockSizeAES128 result.KeySize = 128; // kCCBlockSizeAES128 result.Mode = CipherMode.CBC; result.Padding = PaddingMode.PKCS7; // kCCOptionPKCS7Padding 

मैंने सिफरटेक्स्ट पैदा करने के विभिन्न तरीकों की कोशिश की हैलो / हैलो है:

e0PnmbTg / 3cT3W + 92CDw1Q == में नेट

iPhone पर yrKe5Z7p7MNqx9 + CbBvNqQ ==

और "openssl enc-os-128-cbc -nosalt -a -in hello.txt -pass pass: हैलो" उत्पन्न करता है: QA + Ul + r6Zmr7yHipMcHSbQ ==

अद्यतन: मैंने इसके लिए काम कर रहे कोड को यहां पोस्ट किया है ।

Solutions Collecting From Web of "एईएस इंटरऑपरेबिलिटी नेट एंड आईफ़ोन के बीच?"

बहुत कम से कम, आप अलग-अलग प्रारंभिक वैक्टर (IV) का उपयोग कर रहे हैं।

  • नेट कोड IV के लिए कुंजी का उपयोग करता है

     private static AesCryptoServiceProvider GetProvider(byte[] key) { //Set up the encryption objects AesCryptoServiceProvider result = new AesCryptoServiceProvider(); byte[] RealKey = Encryptor.GetKey(key, result); result.Key = RealKey; result.IV = RealKey; return result; } 

    तथा

     private static byte[] GetKey(byte[] suggestedKey, AesCryptoServiceProvider p) { byte[] kRaw = suggestedKey; List kList = new List(); for (int i = 0; i < p.LegalKeySizes[0].MinSize; i += 8 ) { kList.Add(kRaw[i % kRaw.Length]); } byte[] k = kList.ToArray(); return k; } 

    जो शायद होना चाहिए: kList.Add(kRaw[(i / 8) % kRaw.Length]); । अन्यथा एक कुंजी जिसका लंबाई% 8 == 0 बार बार उसी पत्र का प्रयोग करेंगे, दोह!

    इस प्रकार चौथा (और चाबी) नेट द्वारा उपयोग किया जाता है: hleolhleolhleolh । यह एपीआई का हिस्सा नहीं है, बल्कि उस आवरण कोड के कारण होता है जिसे आपने देखा था (जो इसमें एक गंभीर बग है …)

  • आईफोन कोड IV के लिए 0 का उपयोग करता है

     // Initialization vector; dummy in this case 0's. uint8_t iv[kChosenCipherBlockSize]; memset((void *) iv, 0x0, (size_t) sizeof(iv)); 
  • openssl डिफ़ॉल्ट रूप से उत्पन्न होता है एक बेतरतीब ढंग से उत्पन्न नमक (यही कारण है कि उत्पादन अब अधिक है!)।

Openssl आउटपुट अधिक सुरक्षित है क्योंकि यह एक यादृच्छिक आरंभीकरण वेक्टर से पहले है। ऐसा लगता है कि बेस 64 डीकोड किए गए स्ट्रिंग के पहले कुछ बाइट्स "सॉल्टेड_" हैं आप नमक (-नॉस्ल्ट) का उपयोग न करने के लिए और / या एक IV (-iv) प्रदान करने के लिए ओपनसएल को भी पूछ सकते हैं।

अनिवार्य रूप से, openssl, .Net और आईफ़ोन एक ही एन्क्रिप्शन का उपयोग कर रहे हैं, आपको एन्क्रिप्शन कुंजी और प्रारंभिक वेक्टर के साथ एपीआई कैसे शुरू करने के बारे में सावधान रहना होगा।

क्या आप सुनिश्चित हैं कि आप अपने परीक्षणों में समान एईएस कुंजी का उपयोग कर रहे हैं? आपकी पोस्ट में ओपनएसएसएल का उदाहरण एक पासवर्ड का उपयोग करता है जो ओपनएसएसएल को एक चाबी और एक चतुर्थ (और संभवत: नमक का उपयोग करता है

एक यादृच्छिक 128-बिट कुंजी उत्पन्न करें और इस कुंजी को हेक्स प्रारूप में OpenSSL के साथ निर्दिष्ट करें:

 openssl enc -aes-128-cbc -a -in hello.txt -K KEY_IN_HEX -iv 0 

आपको किसी भी सुरक्षित सिस्टम में IV = 0 का उपयोग नहीं करना चाहिए, लेकिन अंतर-परीक्षण के लिए यह ठीक है।

सी # में

 void test(){ string ctB64 = encrypt("hola"); Console.WriteLine(ctB64); // the same as in objective-c } string encrypt(string input) { try { // Create a new instance of the AesManaged class. This generates a new key and initialization vector (IV). AesManaged myAes = new AesManaged(); // Override the cipher mode, key and IV myAes.Mode = CipherMode.CBC; myAes.IV = new byte[16] { 0x10, 0x16, 0x1F, 0xAD, 0x10, 0x10, 0xAA, 0x22, 0x12, 0x51, 0xF1, 0x1E, 0x15, 0x11, 0x1B, 0x10 }; // must be the same as in objective-c myAes.Key = Encoding.UTF8.GetBytes(“0123456789123456”); //CipherKey; // Byte array representing the key myAes.Padding = PaddingMode.PKCS7; // Create a encryption object to perform the stream transform. ICryptoTransform encryptor = myAes.CreateEncryptor(); // perform the encryption as required... MemoryStream ms = new MemoryStream(); CryptoStream ct = new CryptoStream(ms, encryptor, CryptoStreamMode.Write); byte[] binput = Encoding.UTF8.GetBytes(input); ct.Write(binput, 0, binput.Length); ct.Close(); byte [] result = ms.ToArray(); return Convert.ToBase64String(result); } catch (Exception ex) { // TODO: Log the error Console.WriteLine(ex); throw ex; } } 

· उद्देश्य-सी में, https://github.com/kelp404/CocoaSecurity से कोको सिक्योरिटी लाइब्रेरी जोड़ें

 #import "CocoaSecurity.h" #import "Base64.h" … - (void) test{ unsigned char bytes[] = { 0x10, 0x16, 0x1F, 0xAD, 0x10, 0x10, 0xAA, 0x22, 0x12, 0x51, 0xF1, 0x1E, 0x15, 0x11, 0x1B, 0x10 }; // must be the same as in c# NSData *iv = [NSData dataWithBytesNoCopy:bytes length:16 freeWhenDone:YES]; NSData* key = [@"0123456789123456" dataUsingEncoding:NSUTF8StringEncoding]; CocoaSecurityResult *result = [CocoaSecurity aesEncrypt:@"hola" key:key iv:iv]; NSLog(@"%@", result.base64); // the same as in c# NSData *data = [NSData dataWithBase64EncodedString:result.base64]; CocoaSecurityResult *result2 = [CocoaSecurity aesDecryptWithData:data key:key iv:iv]; NSLog(@"%@", result2.utf8String); // show "hola" }