है IOS में एक स्ट्रिंग एन्क्रिप्ट करने की कोशिश कर रहा हूं और फिर इसे एक टीसीपी सर्वर पर भेज रहा हूं। कोड और आईओएस संस्करणों के पायथन संस्करण नीचे दिखाए गए हैं। कृपया दोनों संस्करणों के आउटपुट देखें। वे काफी समान दिखते हैं लेकिन लंबाई अलग होती है और मुझे कारण पता नहीं है। क्या कोई इसे देख सकता है, कारण क्या हो सकता है?पायथन में एईएस एन्क्रिप्शन आईएसओ
कृपया ध्यान दें कि पायथन लिपि में पैडिंग को त्याग दिया जाना चाहिए, क्योंकि मैंने पहले से ही 16 की टेक्स्ट लंबाई दी है।
अजगर कोड:
#!/usr/bin/env python
from Crypto.Cipher import AES
import base64
import os
# the block size for the cipher object; must be 16, 24, or 32 for AES
BLOCK_SIZE = 16
PADDING = '{'
# one-liner to sufficiently pad the text to be encrypted
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
# one-liners to encrypt/encode and decrypt/decode a string
# encrypt with AES, encode with base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
secret = "123456789"
# create a cipher object using the random secret
cipher = AES.new(secret)
encoded = EncodeAES(cipher, 'password12345678')
print 'Encrypted string:', encoded
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded
उत्पादन:
एन्क्रिप्टेड स्ट्रिंग: 57AayWF4jKYx7KzGkwudIBZUsn1ULOC0C4c5YF3xeI8 =
Decrypted स्ट्रिंग: password12345678
NSString *[email protected]"123456789";
NSString *mystr [email protected]"password12345678";
const char *utfString = [mystr UTF8String];
NSData *aData=[NSData dataWithBytes: utfString length: strlen(utfString)];
aData=[mystr dataUsingEncoding:NSUTF8StringEncoding];
NSData *data;//=[aData AES128EncryptWithKey:forKey];
data=[aData AES128EncryptWithKey:forKey];
NSString *base64 = [data base64EncodedString];
aData=[data AES128DecryptWithKey:forKey];
mystr=[[NSString alloc] initWithData:aData encoding:NSUTF8StringEncoding];
NSLog(@"AES data : %@ \n %@",mystr,base64);
उत्पादन:
एईएस डेटा: password12345678
57AayWF4jKYx7KzGkwudIKNlwA + HErrmiy1Z0szzZds =
आप केवल गद्दी अनदेखा कर सकते हैं अगर आप [ईसीबी मोड] का उपयोग (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29)। मुझे आशा है कि आप ईसीबी मोड का उपयोग नहीं कर रहे हैं। – sarnold
मैंने पाइथन में मोड सेट नहीं किया है, मुझे विश्वास है कि यह डिफ़ॉल्ट मान का उपयोग कर रहा है। – Bora
@ कर्नाल्ड ईसीबी मोड को पैडिंग की भी आवश्यकता है, IV को ईसीबी मोड में सेट नहीं किया जाना चाहिए या सभी शून्य पर सेट नहीं किया जाना चाहिए (यदि प्लेटफ़ॉर्म को IV की आवश्यकता होती है), लेकिन पैडिंग निश्चित रूप से आवश्यक है। या वह पायथन/आईओएस मंच के लिए विशिष्ट है? –