Files
API-KTA/app/Libraries/DhivaAES.php
2026-04-25 04:41:23 +07:00

112 lines
3.4 KiB
PHP

<?php
namespace Dhiva\Core;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class DhivaAES
{
public static function base64url_encode($data, $password = false)
{
return rtrim(strtr(base64_encode(openssl_encrypt($data, "AES-256-CBC", self::keypair($password), OPENSSL_RAW_DATA, SSL_KEY['iv'])), '+/', '-_'), '=');
}
public static function base64url_decode($data, $password = false)
{
$decrypt = openssl_decrypt(base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT)), "AES-256-CBC", self::keypair($password), OPENSSL_RAW_DATA, SSL_KEY['iv']);
return $decrypt;
}
private static function keypair($password)
{
$data = ($password == false) ? SSL_KEY['password'] : $password;
return openssl_pbkdf2($data, SSL_KEY['salt'], SSL_KEY['keyLength'], SSL_KEY['iterations'], "sha256");
}
public static function randomString($aes = false)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < 10; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
return $randomString;
}
public static function jwtencode($token)
{
$tokenParts = explode(".", $token);
$tokenPayload = self::base64url_encode($tokenParts[1]);
return $tokenPayload;
}
public static function jwtdecode($private, $public)
{
$tokenParts = explode(".", $public);
$tokenHeader = $tokenParts[0];
$tokenPayload = self::base64url_decode($private);
if (isset($tokenParts[2])) {
$tokenSignature = $tokenParts[2];
$data = $tokenHeader . "." . $tokenPayload . "." . $tokenSignature;
} else {
return ERROR_TOKEN_UNIDENTIFIED;
}
return $data;
}
public static function jwtvalidator($private, $public)
{
$tokenPrivate = self::jwtdecode($private, $public);
$match = ($tokenPrivate === $public) ? true : false;
return $match;
}
/**
* Generator String dengan enkripsi
*
* @param mixed $length
* @param mixed $aes
* @return string
*/
public static function randomStr(int $length, $aes = false): string
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$index = rand(0, strlen($characters) - 1);
$randomString .= $characters[$index];
}
if ($aes) {
$randomString = self::base64url_encode(strval(intval(microtime(true) * 1000)), 5);
}
return $randomString;
}
public static function aesencodeid(string $string, int $length)
{
$tokenPayload = self::base64url_encode($string . self::randomStr($length));
return $tokenPayload;
}
public static function validateTimestampWtihUserAccess($tokens)
{
$token = self::validateToken($tokens);
if ($token == false) {
return ERROR_TOKEN_UNIDENTIFIED;
}
$model = model('App\Models\SqlModel\SuperUserModelSql');
$user = $model->showBy('super_user_id', $token->super_user_id);
$lastTimeStamp = strtotime($user->access_at);
$timeStampTimeOut = ($lastTimeStamp + JWT_TIMEOUT) - now();
if ($timeStampTimeOut < 0 || !$user->token || $token->token != $user->token) {
$update = ['token' => null];
// $model->update($update, $token->super_user_id);
// return ERROR_TOKEN_EXPIRED;
}
return $token;
}
public static function validateToken($token)
{
return JWT::decode($token, new Key(JWT_KEY, 'HS256'));
}
public static function generateToken($data)
{
return JWT::encode($data, JWT_KEY, 'HS256');
}
}