Предполагая, что вы будете исправлять такие вещи, как пустой IV & amp; что это доказательство концепции, ваш код выходит из строя, потому что:
Чтобы дублировать вывод в JS:
CryptoJS.pad.NoPadding = {pad: function(){}, unpad: function(){}};
var text = "My Secret text\0\0";
var key = CryptoJS.enc.Hex.parse("253D3FB468A0E24677C28A624BE0F939");
var iv = CryptoJS.enc.Hex.parse("00000000000000000000000000000000");
var encrypted = CryptoJS.AES.encrypt(text, key, {iv: iv, padding: CryptoJS.pad.NoPadding});
console.log(encrypted.toString());
Для:
< blockquote>7StScX3LnPUly / VNzBes0w ==
blockquote> Используйте builtins
или __builtin__
, если вы находитесь на Python 2.
def open():
pass
import __builtin__
print open
print __builtin__.open
Это дает вам:
<function open at 0x011E8670>
<built-in function open>
Python имеет модуль builtins
, где хранятся «действительно глобальные» вещи - обычно только стандартные встроенные функции и типы . В Python 2 он был назван __builtin__
, но работал в основном тем же самым.
Этот модуль можно импортировать так же, как и любой другой модуль, но он также волшебным образом снабжает встроенные имена для каждого другого модуля (что doesn 't скрыть их.
Если вам интересно, как это работает, builtins
docs говорят:
В качестве детали реализации большинство модулей имеют имя
blockquote>__builtins__
доступно как часть их глобалов. Значение__builtins__
обычно является либо этим модулем, либо значением атрибута__dict__
этого модуля. Поскольку это детализация реализации, она не может использоваться альтернативными реализациями Python.И
exec
говорит:Если словарь globals не содержит значения для ключа
blockquote>__builtins__
, под этим ключом вставлена ссылка на словарь встроенного модуляbuiltins
. Таким образом, вы можете контролировать, какие встроенные функции доступны для исполняемого кода, вставив ваш собственный словарь__builtins__
в глобалы, прежде чем передавать его наexec()
.Итак, по крайней мере, в CPython, когда вы оцениваете
abs
, он просматривается вglobals()['abs']
, не найден там, а затем просматривается вglobals()['__builtins__'].__dict__['abs']
.И всякий раз, когда Python (или, по крайней мере, CPython) создает новый объект модуля, его код выполняется с
globals
сempty
__builtins__
, что означает, что значение модуля по умолчаниюbuiltins
заполняется, так что это работает. И этотglobals
- тот, который копируется для очень функции и класса, определенных в модуле (и все, что вы делаете явно сglobals
без явной замены__builtins__
), поэтому оно работает внутри функций и классов.
import __builtin__ as builtin
или тому подобное. – kindall 5 January 2011 в 00:10