SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 26.11.2009 10:17:19

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Приколы с key_des_file

Столкнулся с такой проблемой: требуется использование des_encrypt и des_decrypt функций, в документации написано, что если не указывать ключ шифрования, то он будет браться из файла.

А вот с последним то и загвоздка. Файл я создаю и наполняю рандомом чисел, прописываю в конфигурации сервера бд, flush key_file загружаю в адресное пространство файл-ключ, но после всех таких манипуляций при шифровании mysql берет какой-то свой ключ, а не тот что указал я.

Подскажите в чем может быть проблема?

Отредактированно DJK (26.11.2009 10:27:42)

Неактивен

 

#2 26.11.2009 16:06:59

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

Какой длины рандом чисел? MySQL имеет тенденцию игнорировать этот параметр,
если не может прочитать файл. Возможно, не хватает прав на его чтение.

Неактивен

 

#3 26.11.2009 17:53:19

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

dd if=/dev/urandom of=/etc/mysql/res.random count=1 дает длину 512 случайных байт
права стоят "только чтение" для владельца, группы и всех.

была идея, что в файле не задана структура, ведь он заполнен просто цепочкой случайных байт.

п.с.: автор темы - мой коллега по работе.

Отредактированно warman (26.11.2009 17:53:47)

Неактивен

 

#4 26.11.2009 18:11:18

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

Поставьте еще bs=7. Ну, чтобы ощутить всю мощь длины ключа DES smile
И выключите всякие apparmor, selinux и проч и проч.

Неактивен

 

#5 26.11.2009 19:06:04

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

а не мало? по умолчанию bs=512, count=1 даст 1 блок размера 512 байт.
вариант размера блока в 7 байт имеет смысл?

Неактивен

 

#6 26.11.2009 19:28:29

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

DES использует ключ размером... правильно, 56 бит smile

Я, собственно, про 7 байт говорю, чтобы Вы понимали на пальцах про
стойкость алгоритма. А так — если прав хватит, то теоретически, MySQL
должен игнорировать остальные 505 байт. Но лучше, конечно, чтобы
размер файла делился на 7 (там есть понятие «номер ключика из файла»).

Неактивен

 

#7 02.12.2009 11:58:02

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

выставил полные права всем на файл ключа.
подключен des-key-file /etc/mysql/des.key
длина des.key - 7 байт ровно.
содержимое des.key

test123

в списке переменных не появилась опция с ключем sad

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)

Неактивен

 

#8 02.12.2009 15:18:07

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

Оно и не появляется, но у меня шифрует, и если поменять файлик и зафлашить,
то шифрует с новым ключом тоже.

Неактивен

 

#9 03.12.2009 09:03:21

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

фиг знает, откуда у меня берет ключ для шифрования, но после выполнения

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)

Неактивен

 

#10 03.12.2009 11:52:44

DJK
Завсегдатай
Зарегистрирован: 09.08.2009
Сообщений: 32

Re: Приколы с key_des_file

Проблема обнаружена.
В результате шифрования появляются символы соответствие которых нет в таблице UTF и поэтому mysql просто обнуляет эти символы. А в результате получаются поля со значеним NULL, которые потом и не декодируются соответственно.

Отредактированно DJK (03.12.2009 11:53:38)

Неактивен

 

#11 03.12.2009 12:11:04

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

А при чем тут UTF? На выходе des_encrypt, разумеется, VARBINARY,
который никогда никуда не перекодируется:

mysql> select des_decrypt(des_encrypt('blah'));
+----------------------------------+
| des_decrypt(des_encrypt('blah')) |
+----------------------------------+
| blah                             |
+----------------------------------+
1 row in set (0,03 sec)

Неактивен

 

#12 03.12.2009 14:01:24

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file


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)

Неактивен

 

#13 03.12.2009 14:28:06

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

Там warning какой-то. Его в студию smile

Неактивен

 

#14 04.12.2009 11:54:58

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

Incorrect parameters to procedure 'des_decrypt'

Неактивен

 

#15 04.12.2009 13:19:09

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Приколы с key_des_file

Мда, что-то не работает. А если явно указывать ключ вторым аргументом?

Неактивен

 

#16 04.12.2009 14:32:52

warman
Участник
Зарегистрирован: 26.11.2009
Сообщений: 9

Re: Приколы с key_des_file

если ключи указывать явно, то все работает.
при чтении из файла - права ставлю 777 на /etc/mysql/des.key , ставлю дефолтную кодировку принудительно в UTF8 - ответ прежний - NULL

п.с. - в виндовс - после установки UTF8 - заработало на версии 5.1.30

прям шаманства какие то

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson