Python 2.7 密钥和iv被提供,加密后我得到的值与预期值不同

Python 2.7 密钥和iv被提供,加密后我得到的值与预期值不同,python-2.7,encryption,aes,Python 2.7,Encryption,Aes,我正在使用的解密代码: from Cryptodome.Cipher import AES import binascii data = '48fcbd0c1e1643bd618c010e57142a1e45c7fd5e36374eb1738f5b9ab6b4ce67bfea3e226426d43a2aaf9140eced8547d7a6199bde167a9e20de0a87f5c9a9a34361dce8d1d8c35a00018895c200bedebf24c30c920c134e5f9

我正在使用的解密代码

from Cryptodome.Cipher import AES
import binascii

data = '48fcbd0c1e1643bd618c010e57142a1e45c7fd5e36374eb1738f5b9ab6b4ce67bfea3e226426d43a2aaf9140eced8547d7a6199bde167a9e20de0a87f5c9a9a34361dce8d1d8c35a00018895c200bedebf24c30c920c134e5f956d1dfd1201abc3410c093adae070d7771bb5f99145351620573e6fff748ee3b260c9c2a483b886f331497c4023eb370ad1f881a4d165bf5cc8eb9e4008529e6ad2b759767c4cd65f764ffd6412fb58ce5914e2a5280024ac353b5d3b69707afe0c2ad138ffa85b712de22fb84ff2276fe360d6f87abc7879c3e592ec36055da14952eb0c1c973d8f55bd4b662593875b29b83be90b2b4f944b1ed036d4d2e3912ab11c42f77444c93e94d953023a27e8dbd24d7df17c27de5f0bf1ad334d833a8fa78d7ffc85179dc1ade4c32ced6bd902e8ddedad7305db5d2d1e33e5d96cb4422b4dc8f9ab6bb1e88685c44f6bfcc97d1d6b59ab96578c443103f5d4ae72b4cf09a87935e217ae9457a37433b97f6ba7700e1c5960cfefd255f0c740259f8e3c0ac8e9bee82b36742f5922d14964015dce9b2a8a014494821a98224811f2649e92d0372603fd569103be7763065bb9bc2a6a08a9f8da0ce1b567028ae41b83a8e2d19f6f98e22290aaca549c25318cd57f85b0dd9fde9c93f9f790b93a3f4f1787c34382b2b3b9190702723a1fd451c0e285b9258bd6e89b6bf3682760b1273c1a5c7781bac7db9c024e981099181b03c8f85ce0accfa4e1448539b1b62733192a8e2cf98741cfc60e13753c4ca55b26a40fdf0616445a9a46428adc0852c5c84d0a3878ee32f3d1b88cf7cf19a58bb69fb3f4cc43baa67012cc1947da6c0253c9cc291cfcc721faf0e3c16e738c52b94308d7c51a6bc929b8b106dfe546066215a84d410644d5bc6a4b5feae10a377ec57ca3ddce6073aa6f7e968ef97ac1e52a449c1290aa06442e8c15e0aef8d75a6348a3be2869fd90a944867ea7779c01530f73170adf5509fbf3600825758f85372afedb56'
key = '24305c3a354951afe96d1800ad9299bf'
iv = 'heF9BATUfWuISyO8'
data = binascii.unhexlify(data)
decrypter = AES.new(key, AES.MODE_CBC, iv)

plaintext = decrypter.decrypt(data)
print plaintext
from Cryptodome.Cipher import AES
import binascii

BS = 16


def pad(s): return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)

key = '24305c3a354951afe96d1800ad9299bf'
iv = 'heF9BATUfWuISyO8'
data = 'wifi&app_name=MLB9Innings17&app_version=21&app_version_name=2.0.2&country_code=in&device_brand=Videocon&device_carrier=Jio+4G&device_cpu_type=armv8l&device_model=V502430&google_aid=b2753f4e-8aad-44dd-b7b6-823923eb5d67&google_ad_tracking_disabled=0&insdate=1495711043&installer=com.android.vending&install_referrer=utm_source%3D%28not+set%29%26utm_medium%3D%28not+set%29&language=en&mat_id=cc92c5ce-b617-4b6a-b1ce-596da5077425&mobile_country_code=405&mobile_network_code=872&os_version=6.0&screen_density=2.0&screen_layout_size=1280x720&sdk_version=3.11.4&conversion_user_agent=Dalvik%2F2.1.0+%28Linux%3B+U%3B+Android+6.0%3B+V502430+Build%2FMRA58K%29&currency_code=USD&revenue=0.0&system_date=1495711261'


data = pad(data)
encrypter = AES.new(key, AES.MODE_CBC, iv)
encryptedData = encrypter.encrypt(data)
print binascii.hexlify(encryptedData)
加密代码

from Cryptodome.Cipher import AES
import binascii

data = '48fcbd0c1e1643bd618c010e57142a1e45c7fd5e36374eb1738f5b9ab6b4ce67bfea3e226426d43a2aaf9140eced8547d7a6199bde167a9e20de0a87f5c9a9a34361dce8d1d8c35a00018895c200bedebf24c30c920c134e5f956d1dfd1201abc3410c093adae070d7771bb5f99145351620573e6fff748ee3b260c9c2a483b886f331497c4023eb370ad1f881a4d165bf5cc8eb9e4008529e6ad2b759767c4cd65f764ffd6412fb58ce5914e2a5280024ac353b5d3b69707afe0c2ad138ffa85b712de22fb84ff2276fe360d6f87abc7879c3e592ec36055da14952eb0c1c973d8f55bd4b662593875b29b83be90b2b4f944b1ed036d4d2e3912ab11c42f77444c93e94d953023a27e8dbd24d7df17c27de5f0bf1ad334d833a8fa78d7ffc85179dc1ade4c32ced6bd902e8ddedad7305db5d2d1e33e5d96cb4422b4dc8f9ab6bb1e88685c44f6bfcc97d1d6b59ab96578c443103f5d4ae72b4cf09a87935e217ae9457a37433b97f6ba7700e1c5960cfefd255f0c740259f8e3c0ac8e9bee82b36742f5922d14964015dce9b2a8a014494821a98224811f2649e92d0372603fd569103be7763065bb9bc2a6a08a9f8da0ce1b567028ae41b83a8e2d19f6f98e22290aaca549c25318cd57f85b0dd9fde9c93f9f790b93a3f4f1787c34382b2b3b9190702723a1fd451c0e285b9258bd6e89b6bf3682760b1273c1a5c7781bac7db9c024e981099181b03c8f85ce0accfa4e1448539b1b62733192a8e2cf98741cfc60e13753c4ca55b26a40fdf0616445a9a46428adc0852c5c84d0a3878ee32f3d1b88cf7cf19a58bb69fb3f4cc43baa67012cc1947da6c0253c9cc291cfcc721faf0e3c16e738c52b94308d7c51a6bc929b8b106dfe546066215a84d410644d5bc6a4b5feae10a377ec57ca3ddce6073aa6f7e968ef97ac1e52a449c1290aa06442e8c15e0aef8d75a6348a3be2869fd90a944867ea7779c01530f73170adf5509fbf3600825758f85372afedb56'
key = '24305c3a354951afe96d1800ad9299bf'
iv = 'heF9BATUfWuISyO8'
data = binascii.unhexlify(data)
decrypter = AES.new(key, AES.MODE_CBC, iv)

plaintext = decrypter.decrypt(data)
print plaintext
from Cryptodome.Cipher import AES
import binascii

BS = 16


def pad(s): return s + (BS - len(s) % BS) * chr(BS - len(s) % BS)

key = '24305c3a354951afe96d1800ad9299bf'
iv = 'heF9BATUfWuISyO8'
data = 'wifi&app_name=MLB9Innings17&app_version=21&app_version_name=2.0.2&country_code=in&device_brand=Videocon&device_carrier=Jio+4G&device_cpu_type=armv8l&device_model=V502430&google_aid=b2753f4e-8aad-44dd-b7b6-823923eb5d67&google_ad_tracking_disabled=0&insdate=1495711043&installer=com.android.vending&install_referrer=utm_source%3D%28not+set%29%26utm_medium%3D%28not+set%29&language=en&mat_id=cc92c5ce-b617-4b6a-b1ce-596da5077425&mobile_country_code=405&mobile_network_code=872&os_version=6.0&screen_density=2.0&screen_layout_size=1280x720&sdk_version=3.11.4&conversion_user_agent=Dalvik%2F2.1.0+%28Linux%3B+U%3B+Android+6.0%3B+V502430+Build%2FMRA58K%29&currency_code=USD&revenue=0.0&system_date=1495711261'


data = pad(data)
encrypter = AES.new(key, AES.MODE_CBC, iv)
encryptedData = encrypter.encrypt(data)
print binascii.hexlify(encryptedData)
我的任务是首先解密给定的数据,然后加密它,但是
加密值的输出与解密代码中提供的加密数据不匹配,即使我使用了类似的密钥和iv。

第一个代码的解密结果为以下明文:

connection\u type=wifi&app\u name=mlb9inings17&app\u version=21&app\u version\u name=2.0.2&country\code=in&device\u brand=Videocon&device\u carrier=Jio+4G&device\u cpu\u type=armv8l&device\u model=v5024430&google\u-aid=b2753f4e-8aad-44dd-b7b6-823923eb5d67&google\u广告跟踪\u禁用=0&insdate=95711043&installer=14com.android\r\n安装程序源代码供应商%28not+set%29%26utm\U medium%3D%28not+set%29&language=en&mat\U id=cc92c5ce-b617-4b6a-b1ce-596da5077425&mobile\U country\U code=405&mobile\U network\U code=872&os\U version=6.0&os\U version=2.0&screen\U density=2.0&screen\U布局尺寸=1280x720&sdk\U version=3.11.4&conversion\U用户\U代理=Dalvik%2F2F2.1.0+283B+0%Linux+U%502FB+2FB+Android=4303b%V3b&trade=3%=0.0和系统_日期=1495711261
此明文对应于第二个代码的明文,但在开始时还包含数据
连接类型=
,这会影响整个密文,这是现代算法的一个特征。如果纯文本显示为十六进制:

代码>代码>代码>636 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 963655F6D6F64656C3D56353032343333026676F6F676C655F6169643D623237353634652D386161642D334642D623762362D383339323365623564363726676F6F676C655F61645F74661636E67566E675F6469616C65643D302666E73646464646464653133666E73616D73616C66363636363636C65656565656363636363636365656565656565656767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676765656565663636363636E6F742B736574253392353675746D5F6D656565469756D2533442586E6F742B73657425339266C616E6775653D656E266D61745F69643D63393263563652D623631372D36612D623163652D39366461357343235266D6F62696C655F756F756E74795F63636363635353526666D6F62696F656565767676565656565656565656565656F76767676767656565656E747676767676767676767676565656565656565656565656565656565656565656737376767676767676767676F767676767676767676767676767676767676767676767676767676767622E302673637265656E5F6C61796F75745F73697A653D3132383078732302673646B5F76657273696F6E3D332E31312E3426636F6E76657273696F6E5F757365725F6167656E743D44616C76696B22532426322E302B2534C696E7578253342525334222B416F69642B330253343422B5322B53636363634333465B463535357676767676767676767676767676767636363635353535357676767676767676767676767676767676767676767636363636363535353535353535353535353535353535353636363636363636767676767676767676767676762673797374656d5f646174653d313439353731313236312020 您还可以看到,它以两个
0x20
(空格)结尾,即没有使用PKCS7或零填充之类的常用填充(请注意,PyCryptodome不会隐式填充和取消填充)

为了使第二个代码生成第一个代码中使用的密文,您必须在第二个代码的明文开头添加
connection\u type=
,并在末尾添加两个
0x20
字节,并且不必使用PKCS7填充(即不得应用
pad
功能):