Ru-Board.club
← Вернуться в раздел «Web-программирование»

» Функция mcrypt_create_iv и кодировки

Автор: troglodit120
Дата сообщения: 22.05.2016 16:20
[more] Нужна подсказка - УЧУСЬ делать SALT для Хешированного пароля.

Текст, после генерации по - mcrypt_create_iv - не верно записывается в БД.
и
Также, не корректно отображается на странице по "echo".

Страница тестовая - без указания какой-либо кодировки (чисто <?php ?>) - показывает черные ромбики на некоторых символах.

В БД - черные ромбики выглядят как знаки вопроса, а некоторые просто как ОТСУТСТВУЮЩЕЕ место (то есть они там - есть, но места не занимают никакого).

Заданная длинна для SALT - 32 знака, однако генерируется обычно более короткий (22-30 символов), а при записи в базу вообще может оказаться всего 1 символ или 5-6...


Учусь по примеру с YouTube:
Codecourse
PHP OOP Login/Register System: Registering Users (Part 14/23)

Там у него в ячейке для SALT Швецкая кодировка, у меня у меня UTF8_general_ci.
пробовол ствить швецкую как у него - не помогает...

Версия PHP 5.6.3, MySQL 5.6.22

Если не трудно - направьте в нужную сторону... )

зы
на форуме по этому вопросу ничего не нашел...


[/more]
Автор: Mavrikii
Дата сообщения: 22.05.2016 18:23
troglodit120

Цитата:
без указания какой-либо кодировки

кодировку указывает http сервер, если используете, - вот и смотрите в заголовках или в браузере какая кодировка идет.
Цитата:
SALT - 32 знака, однако генерируется обычно более короткий (22-30 символов)

опять же, учитывая выше, сдается мне что у вас браузер пытается показывать в уникоде.
echo strlen(переменная); сколько показывает?

Цитата:
а при записи в базу вообще может оказаться всего 1 символ или 5-6

при этом не указали ни структуры базы, ни как загоняете в нее.
Автор: troglodit120
Дата сообщения: 22.05.2016 21:52
>>> echo strlen(переменная); сколько показывает?
показывает 32 знака
в базу пишет - ни одного в данном случае
но обычно 2-3 записывает
если сменить кодировку ячейки SALT на Швецкую - будет записывать символов 22-29...

>>> как загоняете в нее (БД)

Там все разбросано по классам и еще PDO - я не в состоянии объяснить - пока вижу вроде понимаю, а объяснить не могу...

Я процедурный язык изучал когда-то - а классы с трудом сейчас пытаюсь уразуметь - синтаксис еще слабовато помню.

учусь на примере указанного тутториала на Ютубе...
Автор: Mavrikii
Дата сообщения: 22.05.2016 22:03
troglodit120

Цитата:
в базу пишет - ни одного в данном случае
но обычно 2-3 записывает

значит, очевидно, проблема не в функции, а в записи в базу.


Цитата:
я не в состоянии объяснить - пока вижу вроде понимаю, а объяснить не могу

ну так нужно видеть.. все генерится нормально, вопрос в том, как пытаетесь записать в базу. кстати -
http://stackoverflow.com/questions/17266974/cant-insert-mcrypt-generated-string-into-database
http://stackoverflow.com/questions/26756322/php-using-mcrypt-and-store-the-encrypted-in-mysql
а всякие "сложности" из за того, что функция генерит, по сути, бинарный текст, без какой либо кодировки.
Автор: troglodit120
Дата сообщения: 22.05.2016 22:12
сейчас посмотрю

Добавлено:
понятно по ссылкам...

но у него в примере
PHP OOP Login/Register System: Registering Users (Part 14/23)
Codecourse

https://www.youtube.com/watch?v=G3hkHIoDi6M&list=PLfdtiltiRHWF5Rhuk7k4UAU1_yLAZzhWc&index=14

все работает и с бинарным стрингом...
вот хотелось бы знать почему

и в базе у меня кодировка utf8_general_ci - она же должна все хавать... я же для этого ее и выбирал...
в ячейке VARCHAR
Автор: Mavrikii
Дата сообщения: 22.05.2016 22:40
troglodit120

Цитата:
она же должна все хавать... я же для этого ее и выбирал

а в начале подключения к базе указываете SET NAMES и так далее?
на видео, кстати, не факт, что соль потом прочитается в том же виде обратно.
Автор: troglodit120
Дата сообщения: 22.05.2016 23:03
[more]
Цитата:
на видео, кстати, не факт, что соль потом прочитается в том же виде обратно.


может пока оставить как есть - он сам может потом исправит - я до конца не смотрел еще...
но у него-то красиво в базу записывается - печатные символы все...
в общем если он сам потом не исправит буду пробовать через "Base64 Encode"...
Только бесит, один и тот же код пишешь - у одного работает - у другого - нет!

код такой примерно - если что:
======
register.php
$salt = Hash::salt(32);

Hash.php
class Hash {
public static fubctiuon salt($length) {
return mcrypt_create_iv($lenght);
}
}

register.php
try {
$user->create(array(
'username' => Input::get('username'),
'salt' => $salt
));

}
потом $salt и остальные из Аррея пишутся в базу
как происходит непосредственное внесение в базу - там сам черт ногу сломит - обстракции...

ps
благодарю за помощь, пока наверно - все...
посмотрю видео - если он сам не исправит - буду спрашивать дальше. ))

[/more]
Автор: Dinozzo
Дата сообщения: 03.06.2016 17:09

Цитата:
на видео, кстати, не факт, что соль потом прочитается в том же виде обратно

Может лучше самому упаковывать/распаковывать salt в строку base64 и хранить ее в таком виде? Тогда по идее кодировка не должна влиять.
Автор: Mavrikii
Дата сообщения: 03.06.2016 20:02
Dinozzo
по ссылкам на stackoverflow так и было предложено.

Страницы: 1

Предыдущая тема: Инициализация чата smotri.com


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.