51 lines
1.5 KiB
PHP
51 lines
1.5 KiB
PHP
<?php
|
|
namespace App\Support\LegacyCrypto;
|
|
|
|
final class CiPassword
|
|
{
|
|
private const PASS_KEY = 'WmhEbHNGbmFAKTE3MSEwJmNvSW5Sb29NKw==';
|
|
private const PASS_SET = 0;
|
|
|
|
private const METHOD = 'aes-256-ctr';
|
|
private const IV = '567-av23-901-345';
|
|
|
|
private static function opt(): int
|
|
{
|
|
// CI3에서 define('OPENSSL_ZERO_PADDING', 2) 하던 것과 동일하게 맞춤
|
|
return defined('OPENSSL_ZERO_PADDING') ? OPENSSL_ZERO_PADDING : 2;
|
|
}
|
|
|
|
/** @return array{0:string,1:string,2:string} */
|
|
public static function makeAll(string $plain): array
|
|
{
|
|
$key = self::PASS_KEY;
|
|
$iv = self::IV;
|
|
$opt = self::opt();
|
|
|
|
$enc0 = hash_hmac('ripemd320', $plain, $key);
|
|
$enc0 = hash('sha512', $enc0);
|
|
$enc0 = openssl_encrypt($enc0, self::METHOD, $key, $opt, $iv);
|
|
|
|
$enc1 = hash_hmac('ripemd320', $plain, $key);
|
|
$enc1 = openssl_encrypt($enc1, self::METHOD, $key, $opt, $iv);
|
|
$enc1 = hash('sha512', $enc1);
|
|
|
|
$enc2 = openssl_encrypt($plain, self::METHOD, $key, $opt, $iv);
|
|
$enc2 = hash('sha512', $enc2);
|
|
$enc2 = hash_hmac('ripemd320', $enc2, $key);
|
|
|
|
return [$enc0, $enc1, $enc2];
|
|
}
|
|
|
|
public static function make(string $plain, int $set = self::PASS_SET): string
|
|
{
|
|
$all = self::makeAll($plain);
|
|
return $all[$set] ?? $all[0];
|
|
}
|
|
|
|
public static function makePass2(string $pin2): string
|
|
{
|
|
return hash('sha512', $pin2);
|
|
}
|
|
}
|