Ах! - Да, работает как шарм! Я открыл щедрость и могу предоставить ее за 23 часа. Я установил напоминание для себя, чтобы сделать это :-)!

шлом (не слишком отдаленно) было принято решение (кто-то, кто здесь больше работает) всегда «шифровать» идентификаторы базы данных к чему-то другому, на лету, всякий раз, когда это было необходимо для внешней связи.

Теперь мы перешли с PHP 5.x на PHP 7.0 для нашего основного приложения, и наши микросервисы, разбросанные по нашей инфраструктуре, работают на 7.0 или 7.1. Серверы 7.1 продолжают выдавать предупреждения об устаревании для mcrypt. Нет, бигги, просто пока. Но с PHP 7.2 не за горами, мы хотим продолжать обновлять и обновлять. Макрипт блокирует.

Сохранить все зашифрованные в настоящее время значения в 60 таблицах в 1400 базах данных - огромная задача. Есть ли способ использовать OpenSSL с Blowfish и ECB, чтобы получить одинаковые закодированные и декодированные значения, чтобы увести нас в ложное чувство безопасности? Все, чтобы мы могли планировать миграцию нашей базы данных далеко вперед.

В основном, текущее зашифрованное значение таково:

item:13fb7533bf19399ff114468b194ebfaf

Это удостоверение личности123, Он проходит через следующие функции, чтобы добраться до этой строки:

$id   = 123;
$type = 'item';

$serialized = serialize('' . $id); // To make sure always a string gets put in

$ivSize = mcrypt_create_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND);
$iv     = mcrypt_create_iv($ivSize);

$passCrypt = mcrypt_encrypt(MCRYPT_BLOWFISH, $type, $serialized, MCRYPT_MODE_ECB, $iv);
$encoded   = bin2hex($passCrypt); // `13fb7533bf19399ff114468b194ebfaf`

$encryptedId = $type . ':' . $encoded;

Это дает окончательный результатitem:13fb7533bf19399ff114468b194ebfaf.

Теперь для обратного:

$encryptedId = 'item:13fb7533bf19399ff114468b194ebfaf';

$type = 'item';
$encryptedIdOnly = substr($encryptedId, strlen($type) + 1); // `13fb...`

$decoded   = hex2bin($encryptedIdOnly);
$iv        = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_BLOWFISH, MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = mcrypt_decrypt(MCRYPT_BLOWFISH, 'item', $decoded, MCRYPT_MODE_ECB, $iv); // This gives ' `s:3:"123";` '

$unserialized = unserialize($decrypted); // '123'

Я пробовал это в течение нескольких часов, но я полностью ошеломлен чем-то крипто (но я хочу учиться!). Мой текущий код:

$cipher = 'BF-ECB';
//$cipher = 'BF'; (I've tried both, no difference)

$isCtypeXDigit = ctype_xdigit($decipher);
$decoded       = hex2bin($decipher);
$ivLength      = openssl_cipher_iv_length($cipher);
$randomBytes   = openssl_random_pseudo_bytes($ivLength);
$decrypted     = openssl_decrypt($decoded, $cipher, $prefix, OPENSSL_RAW_DATA | OPENSSL_NO_PADDING, $randomBytes);
$unserialized  = unserialize($decrypted);

Что дает мне тысячу вещей, все похожие на��IY_Lc�d:�_���, Может ли кто-нибудь пролить свет на это - возможно ли это?

Ответы на вопрос(1)

Ваш ответ на вопрос