Задавайте вопросы, мы ответим
Вы не зашли.
Столкнулся с такой проблемой: требуется использование des_encrypt и des_decrypt функций, в документации написано, что если не указывать ключ шифрования, то он будет браться из файла.
А вот с последним то и загвоздка. Файл я создаю и наполняю рандомом чисел, прописываю в конфигурации сервера бд, flush key_file загружаю в адресное пространство файл-ключ, но после всех таких манипуляций при шифровании mysql берет какой-то свой ключ, а не тот что указал я.
Подскажите в чем может быть проблема?
Отредактированно DJK (26.11.2009 10:27:42)
Неактивен
Какой длины рандом чисел? MySQL имеет тенденцию игнорировать этот параметр,
если не может прочитать файл. Возможно, не хватает прав на его чтение.
Неактивен
dd if=/dev/urandom of=/etc/mysql/res.random count=1 дает длину 512 случайных байт
права стоят "только чтение" для владельца, группы и всех.
была идея, что в файле не задана структура, ведь он заполнен просто цепочкой случайных байт.
п.с.: автор темы - мой коллега по работе.
Отредактированно warman (26.11.2009 17:53:47)
Неактивен
Поставьте еще bs=7. Ну, чтобы ощутить всю мощь длины ключа DES
И выключите всякие apparmor, selinux и проч и проч.
Неактивен
а не мало? по умолчанию bs=512, count=1 даст 1 блок размера 512 байт.
вариант размера блока в 7 байт имеет смысл?
Неактивен
DES использует ключ размером... правильно, 56 бит
Я, собственно, про 7 байт говорю, чтобы Вы понимали на пальцах про
стойкость алгоритма. А так — если прав хватит, то теоретически, MySQL
должен игнорировать остальные 505 байт. Но лучше, конечно, чтобы
размер файла делился на 7 (там есть понятие «номер ключика из файла»).
Неактивен
выставил полные права всем на файл ключа.
подключен des-key-file /etc/mysql/des.key
длина des.key - 7 байт ровно.
содержимое des.key
test123
в списке переменных не появилась опция с ключем
Variable_name Value
auto_increment_increment 1
auto_increment_offset 1
automatic_sp_privileges ON
back_log 50
basedir /usr/
binlog_cache_size 32768
bulk_insert_buffer_size 8388608
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
collation_connection latin1_swedish_ci
collation_database latin1_swedish_ci
collation_server latin1_swedish_ci
completion_type 0
concurrent_insert 1
connect_timeout 5
datadir /var/lib/mysql/
date_format %Y-%m-%d
datetime_format %Y-%m-%d %H:%i:%s
default_week_format 0
delay_key_write ON
delayed_insert_limit 100
delayed_insert_timeout 300
delayed_queue_size 1000
div_precision_increment 4
engine_condition_pushdown OFF
expire_logs_days 10
flush OFF
flush_time 0
ft_boolean_syntax + -><()~*:""&|
ft_max_word_len 84
ft_min_word_len 4
ft_query_expansion_limit 20
ft_stopword_file (built-in)
group_concat_max_len 1024
have_archive YES
have_bdb NO
have_blackhole_engine YES
have_compress YES
have_crypt YES
have_csv YES
have_dynamic_loading YES
have_example_engine NO
have_federated_engine YES
have_geometry YES
have_innodb YES
have_isam NO
have_merge_engine YES
have_ndbcluster DISABLED
have_openssl YES
have_ssl YES
have_query_cache YES
have_raid NO
have_rtree_keys YES
have_symlink YES
hostname warmanhost
init_connect
init_file
init_slave
innodb_additional_mem_pool_size 1048576
innodb_autoextend_increment 8
innodb_buffer_pool_awe_mem_mb 0
innodb_buffer_pool_size 8388608
innodb_checksums ON
innodb_commit_concurrency 0
innodb_concurrency_tickets 500
innodb_data_file_path ibdata1:10M:autoextend
innodb_data_home_dir
innodb_doublewrite ON
innodb_fast_shutdown 1
innodb_file_io_threads 4
innodb_file_per_table OFF
innodb_flush_log_at_trx_commit 1
innodb_flush_method
innodb_force_recovery 0
innodb_lock_wait_timeout 50
innodb_locks_unsafe_for_binlog OFF
innodb_log_arch_dir
innodb_log_archive OFF
innodb_log_buffer_size 1048576
innodb_log_file_size 5242880
innodb_log_files_in_group 2
innodb_log_group_home_dir ./
innodb_max_dirty_pages_pct 90
innodb_max_purge_lag 0
innodb_mirrored_log_groups 1
innodb_open_files 300
innodb_rollback_on_timeout OFF
innodb_support_xa ON
innodb_sync_spin_loops 20
innodb_table_locks ON
innodb_thread_concurrency 8
innodb_thread_sleep_delay 10000
interactive_timeout 28800
join_buffer_size 131072
key_buffer_size 16777216
key_cache_age_threshold 300
key_cache_block_size 1024
key_cache_division_limit 100
language /usr/share/mysql/english/
large_files_support ON
large_page_size 0
large_pages OFF
lc_time_names en_US
license GPL
local_infile ON
locked_in_memory OFF
log ON
log_bin ON
log_bin_trust_function_creators OFF
log_error
log_queries_not_using_indexes OFF
log_slave_updates OFF
log_slow_queries OFF
log_warnings 1
long_query_time 10
low_priority_updates OFF
lower_case_file_system OFF
lower_case_table_names 0
max_allowed_packet 16776192
max_binlog_cache_size 4294967295
max_binlog_size 104857600
max_connect_errors 10
max_connections 100
max_delayed_threads 20
max_error_count 64
max_heap_table_size 16777216
max_insert_delayed_threads 20
max_join_size 18446744073709551615
max_length_for_sort_data 1024
max_prepared_stmt_count 16382
max_relay_log_size 0
max_seeks_for_key 4294967295
max_sort_length 1024
max_sp_recursion_depth 0
max_tmp_tables 32
max_user_connections 0
max_write_lock_count 4294967295
multi_range_count 256
myisam_data_pointer_size 6
myisam_max_sort_file_size 2147483647
myisam_recover_options OFF
myisam_repair_threads 1
myisam_sort_buffer_size 8388608
myisam_stats_method nulls_unequal
ndb_autoincrement_prefetch_sz 32
ndb_force_send ON
ndb_use_exact_count ON
ndb_use_transactions ON
ndb_cache_check_time 0
ndb_connectstring
net_buffer_length 16384
net_read_timeout 30
net_retry_count 10
net_write_timeout 60
new OFF
old_passwords OFF
open_files_limit 1024
optimizer_prune_level 1
optimizer_search_depth 62
pid_file /var/run/mysqld/mysqld.pid
port 3306
preload_buffer_size 32768
profiling OFF
profiling_history_size 15
protocol_version 10
query_alloc_block_size 8192
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 16777216
query_cache_type ON
query_cache_wlock_invalidate OFF
query_prealloc_size 8192
range_alloc_block_size 2048
read_buffer_size 131072
read_only OFF
read_rnd_buffer_size 262144
relay_log_purge ON
relay_log_space_limit 0
rpl_recovery_rank 0
secure_auth OFF
secure_file_priv
server_id 1
skip_external_locking ON
skip_networking OFF
skip_show_database OFF
slave_compressed_protocol OFF
slave_load_tmpdir /tmp/
slave_net_timeout 3600
slave_skip_errors OFF
slave_transaction_retries 10
slow_launch_time 2
socket /var/run/mysqld/mysqld.sock
sort_buffer_size 2097144
sql_big_selects ON
sql_mode
sql_notes ON
sql_warnings OFF
ssl_ca /etc/mysql/ca-cert.pem
ssl_capath
ssl_cert /etc/mysql/server-cert.pem
ssl_cipher
ssl_key /etc/mysql/server-key.pem
storage_engine MyISAM
sync_binlog 0
sync_frm ON
system_time_zone MSK
table_cache 64
table_lock_wait_timeout 50
table_type MyISAM
thread_cache_size 8
thread_stack 131072
time_format %H:%i:%s
time_zone SYSTEM
timed_mutexes OFF
tmp_table_size 33554432
tmpdir /tmp
transaction_alloc_block_size 8192
transaction_prealloc_size 4096
tx_isolation REPEATABLE-READ
updatable_views_with_limit YES
version 5.0.45-Debian_1ubuntu3-log
version_comment Debian etch distribution
version_compile_machine i486
version_compile_os pc-linux-gnu
wait_timeout 28800
Отредактированно warman (02.12.2009 11:59:12)
Неактивен
Оно и не появляется, но у меня шифрует, и если поменять файлик и зафлашить,
то шифрует с новым ключом тоже.
Неактивен
фиг знает, откуда у меня берет ключ для шифрования, но после выполнения
set names utf8; update db1 set field1=des_decrypt(des_encrypt(field1));
вместо русских букв в таблице NULLы
а после
set names utf8; update db1 set field1=des_encrypt(field1);
зашифрованная таблица
UPD:
в нашей таблице используется кодировка utf8, сравнение utf8_bin.
в результате выполнения des_encrypt появляется warning 1366;
на проверочной таблице в cp1251 сравнение cp1251_bin все ОК.
пс. задолбали приколы с кодировкой
Отредактированно warman (03.12.2009 11:41:35)
Неактивен
Проблема обнаружена.
В результате шифрования появляются символы соответствие которых нет в таблице UTF и поэтому mysql просто обнуляет эти символы. А в результате получаются поля со значеним NULL, которые потом и не декодируются соответственно.
Отредактированно DJK (03.12.2009 11:53:38)
Неактивен
А при чем тут UTF? На выходе des_encrypt, разумеется, VARBINARY,
который никогда никуда не перекодируется:
Неактивен
mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> select des_decrypt(des_encrypt('blah'));
+----------------------------------+
| des_decrypt(des_encrypt('blah')) |
+----------------------------------+
| NULL |
+----------------------------------+
1 row in set, 1 warning (0.00 sec)
будем разбираться, но спасибо за наводку
Отредактированно warman (03.12.2009 14:08:41)
Неактивен
Там warning какой-то. Его в студию
Неактивен
Incorrect parameters to procedure 'des_decrypt'
Неактивен
Мда, что-то не работает. А если явно указывать ключ вторым аргументом?
Неактивен
если ключи указывать явно, то все работает.
при чтении из файла - права ставлю 777 на /etc/mysql/des.key , ставлю дефолтную кодировку принудительно в UTF8 - ответ прежний - NULL
п.с. - в виндовс - после установки UTF8 - заработало на версии 5.1.30
прям шаманства какие то
Неактивен