Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 21, 2015 07:56:27

rvlad1987
Зарегистрирован: 2015-01-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

Привет!
Волею судьбы столкнулся с питоном (делаю аддон для XBMC Python 2.7.8, источник контента т. е. парсинг сайта выдергивание видео ссылок). Разработчики сайта не поленились и используют криптографию в обмене флешплеер - сервер и получение прямых ссылок (Blowfish, mode: CBC, padding:none, prepend IV to cipher text), а секретный ключ передают закодированным с помощью RSA private key Вообщем весело … и так вопросы:
1. Существуют ли модули для работы с RSA keys?
вот пример, на ActionScript3 (из флешплеера сайта) используется фреймфорк crypto.hurlant.com, где переданная сигнатура sign расшифровывается с помощью приват ключа P_KEY, в итоге получается пароль pwd к Blowfish:

priv_key = PEM.readRSAPrivateKey(this.P_KEY);
dst = new ByteArray();
priv_key.decrypt(sign, dst, sign.length);
pwd = Hex.toString(Hex.fromArray(dst));
2. Существуют ли модули для работы с Blowfish?
3. Если эти модули для другой версии питона, можно ли их импортировать в проекте на 2.7.8?
Уффффф … ну как-то так, подскажите, ткните ссылкой

Отредактировано rvlad1987 (Янв. 21, 2015 08:00:37)

Офлайн

#3 Янв. 21, 2015 13:13:09

rvlad1987
Зарегистрирован: 2015-01-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

Shaman, спасибо.
Короч, установил это PyCrypto, значит по первому вопросу, сделал так:

from Crypto.Cipher import PKCS1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA
from Crypto import Random
# ...............
key = RSA.importKey( open('c:\key.pem').read() )
dsize = SHA.digest_size
sentinel = Random.new().read(15+dsize)      
cipher = PKCS1_v1_5.new(key)
key_bf = cipher.decrypt(ciphertext, sentinel) # вот и наш ключик к blowfish
по второму вопросу, тот же модуль (тут сугубо мой случай, но все же):
# ............
from Crypto.Cipher import Blowfish
# ............
iv = cipherdata[:8] #вектор в данных 8 первые восемь байт
hexdata = cipherdata.decode("hex")
cipher2 = Blowfish.new(key_bf, Blowfish.MODE_CBC, iv)
dec = cipher2.decrypt(hexdata)
print dec[8:] # вот наш долгожданный конфиг )))
Остается портировать код в XBMC на win, а после на linux.

Офлайн

#4 Янв. 22, 2015 12:05:29

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

rvlad1987
используют криптографию в обмене флешплеер - сервер и получение прямых ссылок
Что же это за сайт такой?

Офлайн

#5 Янв. 22, 2015 13:13:58

rvlad1987
Зарегистрирован: 2015-01-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

alex925, kset.kz - хорошие быстрые сервера + бесплатный трафик у моего провайдера.
Прикрутил к XBMC криптографию под win32, а можно ли из pyd-файла dll'ки сделать so для linux машин?

Офлайн

#6 Янв. 25, 2015 00:39:39

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

rvlad1987
можно ли из pyd-файла dll'ки сделать so для linux машин?
Microsoft (R) COFF/PE Dumper Version 12.00.31101.0
Copyright (C) Microsoft Corporation. All rights reserved.


Dump of file _ssl.pyd

File Type: DLL

Section contains the following imports:

WS2_32.dll
100D6220 Import Address Table
1010FD00 Import Name Table
0 time date stamp
0 Index of first forwarder reference

Ordinal 19
Ordinal 111
Ordinal 22
Ordinal 3
Ordinal 112
Ordinal 16
Ordinal 18

CRYPT32.dll
100D6010 Import Address Table
1010FAF0 Import Name Table
0 time date stamp
0 Index of first forwarder reference

28 CertEnumCRLsInStore
3B CertFreeCRLContext
12 CertCloseStore
2C CertEnumCertificatesInStore
58 CertOpenSystemStoreA
40 CertFreeCertificateContext
47 CertGetEnhancedKeyUsage

KERNEL32.dll
100D605C Import Address Table
1010FB3C Import Name Table
0 time date stamp
0 Index of first forwarder reference

162 FreeLibrary
52 CloseHandle
2A3 GetVersionExA
156 FlushConsoleInputBuffer
473 SetLastError
2E9 InterlockedCompareExchange
4C0 TerminateProcess
1C0 GetCurrentProcess
4D3 UnhandledExceptionFilter
4A5 SetUnhandledExceptionFilter
2EC InterlockedExchange
2BF GlobalMemoryStatus
1C1 GetCurrentProcessId
3A7 QueryPerformanceCounter
293 GetTickCount
264 GetStdHandle
1F3 GetFileType
2A2 GetVersion
215 GetModuleHandleA
245 GetProcAddress
1C5 GetCurrentThreadId
367 MultiByteToWideChar
202 GetLastError
4B2 Sleep
33C LoadLibraryA
300 IsDebuggerPresent
DE DisableThreadLibraryCalls
279 GetSystemTimeAsFileTime
143 FindNextFileA
132 FindFirstFileA
12E FindClose

USER32.dll
100D620C Import Address Table
1010FCEC Import Name Table
0 time date stamp
0 Index of first forwarder reference

168 GetProcessWindowStation
123 GetDesktopWindow
20E MessageBoxA
18B GetUserObjectInformationW

GDI32.dll
100D6030 Import Address Table
1010FB10 Import Name Table
0 time date stamp
0 Index of first forwarder reference

31 CreateDCA
30 CreateCompatibleDC
1CB GetDeviceCaps
2F CreateCompatibleBitmap
277 SelectObject
1FB GetObjectA
13 BitBlt
1A7 GetBitmapBits
E6 DeleteObject
E3 DeleteDC

ADVAPI32.dll
100D6000 Import Address Table
1010FAE0 Import Name Table
0 time date stamp
0 Index of first forwarder reference

282 RegisterEventSourceA
28E ReportEventA
DB DeregisterEventSource

python27.dll
100D6240 Import Address Table
1010FD20 Import Name Table
0 time date stamp
0 Index of first forwarder reference

15F PyList_Append
2AF PyThread_release_lock
268 PySet_New
3E PyCapsule_Import
356 Py_InitModule4
B0 PyErr_WarnEx
2FD PyUnicodeUCS2_DecodeUTF8
86 PyDict_SetItemString
F5 PyExc_TypeError
1A6 PyModule_AddObject
94 PyErr_Format
130 PyGILState_Ensure
193 PyMem_Malloc
165 PyList_New
216 PyObject_IsTrue
160 PyList_AsTuple
90 PyErr_Clear
3CC _PyString_Resize
A5 PyErr_SetFromErrnoWithFilenameObject
178 PyLong_FromLong
16D PyLong_AsLong
408 _Py_TrueStruct
ED PyExc_RuntimeWarning
2C5 PyType_IsSubtype
AD PyErr_SetString
371 _PyArg_ParseTupleAndKeywords_SizeT
E PyBool_FromLong
1A5 PyModule_AddIntConstant
203 PyObject_Free
377 _PyByteArray_empty_string
2AD PyThread_get_thread_ident
9A PyErr_Occurred
FD PyExc_ValueError
21C PyObject_Repr
2E3 PyUnicodeUCS2_AsASCIIString
1A8 PyModule_GetDict
30F PyUnicodeUCS2_FromObject
E3 PyExc_MemoryError
312 PyUnicodeUCS2_FromStringAndSize
CA PyEval_SaveThread
B2 PyErr_WriteUnraisable
E7 PyExc_OSError
192 PyMem_Free
401 _Py_NoneStruct
372 _PyArg_ParseTuple_SizeT
1F6 PyObject_CallFunctionObjArgs
E8 PyExc_OverflowError
221 PyObject_SetAttrString
330 PyWeakref_NewRef
85 PyDict_SetItem
C9 PyEval_RestoreThread
40A _Py_ZeroStruct
AC PyErr_SetObject
26 PyByteArray_Type
2C7 PyType_Ready
283 PyString_InternFromString
20B PyObject_GetBuffer
2A5 PyThread_allocate_lock
263 PySet_Add
98 PyErr_NoMemory
32E PyWeakref_GetObject
17E PyLong_FromUnsignedLong
341 Py_FileSystemDefaultEncoding
2E6 PyUnicodeUCS2_AsEncodedString
2A4 PyThread_acquire_lock
A3 PyErr_SetFromErrno
276 PyString_AsString
169 PyList_Size
18 PyBuffer_IsContiguous
132 PyGILState_Release
311 PyUnicodeUCS2_FromString
7D PyDict_GetItem
282 PyString_FromStringAndSize
373 _PyArg_Parse_SizeT
1A PyBuffer_Release
30D PyUnicodeUCS2_FromFormat
151 PyInt_FromLong
1F9 PyObject_CallObject
97 PyErr_NewExceptionWithDoc
A7 PyErr_SetFromWindowsErr
30C PyUnicodeUCS2_FromEncodedObject
83 PyDict_New
DB PyExc_IOError
2BD PyTuple_New
224 PyObject_Str
2AA PyThread_free_lock
39 PyCallable_Check
3B9 _PyObject_New
8F PyErr_CheckSignals
281 PyString_FromString
3F7 _Py_BuildValue_SizeT

MSVCR90.dll
100D60DC Import Address Table
1010FBBC Import Name Table
0 time date stamp
0 Index of first forwarder reference

390 _stat64i32
535 qsort
52A memset
554 strerror
55B strncpy
4EF fwrite
526 memcpy
4FB isalnum
4FE isdigit
504 isspace
54E strchr
170 _errno
8C __clean_type_info_names_internal
31C _onexit
276 _lock
96 __dllonexit
3E6 _unlock
52E printf
14B _crt_debugger_hook
173 _except_handler4_common
6A __CppXcptFilter
10B _adjust_fdiv
115 _amsg_exit
205 _initterm_e
204 _initterm
160 _decode_pointer
16B _encoded_null
287 _malloc_crt
16A _encode_pointer
1B7 _ftime64
4B5 abort
561 strstr
546 sprintf
1DB _getch
543 signal
4DF fputs
4BF atoi
1F5 _gmtime64
565 strtol
55F strrchr
505 isupper
572 tolower
3A4 _strnicmp
39A _stricmp
274 _localtime64
3CA _time64
513 isxdigit
54F strcmp
55A strncmp
4DC fprintf
537 raise
17C _exit
A1 __iob_func
578 vfprintf
40A _vsnprintf
59A wcsstr
4F4 getenv
54A sscanf
566 strtoul
51B malloc
53A realloc
4E4 free
4CF fclose
528 memmove
46C _wfopen
4D5 fgets
4EA fseek
4D0 feof
4EC ftell
18A _fileno
366 _setmode
4DA fopen
4D2 fflush
4E2 fread
4D1 ferror

Summary

E000 .data
3B000 .rdata
B000 .reloc
D5000 .text
Нельзя.

Офлайн

#7 Янв. 25, 2015 06:27:04

rvlad1987
Зарегистрирован: 2015-01-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите переделать код на Python (RSA, Blowfish)

Shaman,
серьезный аргумент
теперь с плагином таскаю версию криптографии для win32(pyd), linux2 (so) и osx (so) подключаю в зависимости от sys.platform

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version