Попробуйте следующее:
SELECT to_char (2/3::float, 'FM999999990.00');
-- RESULT: 0.67
Или просто:
SELECT round (2/3::DECIMAL, 2)::TEXT
-- RESULT: 0.67
Править
Я сделал решение, которое использует ctypes (который, в свою очередь, использует C) для обнуления памяти.
import sys
import ctypes
def zerome(string):
location = id(string) + 20
size = sys.getsizeof(string) - 20
memset = ctypes.cdll.msvcrt.memset
# For Linux, use the following. Change the 6 to whatever it is on your computer.
# memset = ctypes.CDLL("libc.so.6").memset
print "Clearing 0x%08x size %i bytes" % (location, size)
memset(location, 0, size)
Я не даю никаких гарантий безопасности этого кода. Протестировано для работы на x86 и CPython 2.6.2. Более подробная запись здесь .
Расшифровка и шифрование в Python не работают. Строки и целые числа интернированы и постоянны, что означает, что вы оставляете беспорядок информации о паролях повсюду.
Хеширование - стандартный ответ, хотя, конечно, открытый текст в конечном итоге нужно где-то обрабатывать.
Правильное решение состоит в том, чтобы выполнять важные процессы как модуль C.
Но если ваша память постоянно скомпрометирована, я бы переосмыслил вашу настройку безопасности.
на основе ответа culix: следующие работы с Linux 64-разрядная архитектура.
Протестированный на Debian основывал системы.
import sys
import ctypes
def nuke(var_to_nuke):
strlen = len(var_to_nuke)
offset = sys.getsizeof(var_to_nuke) - strlen - 1
ctypes.memset(id(var_to_nuke) + offset, 0, strlen)
del var_to_nuke # derefrencing the pointer.
, или, если вы очень параноик насчет дампов, храните уникальный случайный ключ в некоторых в другом месте, например, в другом потоке, в реестре, на вашем сервере и т. д.
Нет возможности «пометить как конфиденциальные», но вы можете зашифровать данные в памяти и снова расшифровать их, когда вам понадобится их использовать - не идеальное решение, но лучшее, что я могу придумать.