首頁 後端開發 php教程 PHP可逆加密解密算法

PHP可逆加密解密算法

Jun 20, 2016 pm 01:03 PM
data encrypt key ord substr

对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。

对于需要还原的信息,则需要采用可逆的加密解密算法。

下面一组PHP函数是实现此加密解密的方法:

加密算法如下:

function encrypt($data, $key)
{
	$key	=	md5($key);
    $x		=	0;
    $len	=	strlen($data);
    $l		=	strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
        	$x = 0;
        }
        $char .= $key{$x};
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    return base64_encode($str);
}
登入後複製

解密算法如下:

function decrypt($data, $key)
{
	$key = md5($key);
    $x = 0;
    $data = base64_decode($data);
    $len = strlen($data);
    $l = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l) 
        {
        	$x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
        {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }
        else
        {
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return $str;
}
登入後複製

上述加密解密的过程均需要用到一个加密密钥(即参数$key)。

$data = &#39;PHP加密解密算法&#39;; // 被加密信息 

$key = &#39;123&#39;; // 密钥 

$encrypt = encrypt($data, $key); 

$decrypt = decrypt($encrypt, $key); 

echo $encrypt, "\n", 

$decrypt;
登入後複製

上述将输出类似如下结果:

gniCSOzZG+HnS9zcFea7SefNGhXF
PHP加密解密算法

从上述结果可以看出,这是一组可逆的加密解密算法,可以用于部分需要还原的数据加密。


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SQL中的identity屬性是什麼意思? SQL中的identity屬性是什麼意思? Feb 19, 2024 am 11:24 AM

SQL中的Identity是什麼,需要具體程式碼範例在SQL中,Identity是一種用於產生自增數字的特殊資料類型,它常用於唯一識別表中的每一行資料。 Identity欄位通常與主鍵列搭配使用,可確保每筆記錄都有獨一無二的識別碼。本文將詳細介紹Identity的使用方式以及一些實際的程式碼範例。 Identity的基本使用方式在建立表格時,可以使用Identit

SpringBoot怎麼監聽redis Key變化事件 SpringBoot怎麼監聽redis Key變化事件 May 26, 2023 pm 01:55 PM

一、功能概覽鍵空間通知使得客戶端可以透過訂閱頻道或模式,來接收那些以某種方式改變了Rediskey變化的事件。所有修改key鍵的指令。所有接收到LPUSHkeyvalue[value…]指令的鍵。 db資料庫中所有已過期的鍵。活動透過Redis的訂閱與發布功能(pub/sub)來分發,因此所有支援訂閱與發布功能的用戶端都可以在無須做任何修改的情況下,直接使用按鍵空間通知功能。因為Redis目前的訂閱與發布功能採取的是發送即忘(fireandforget)策略,所以如果你的程

redis批量刪除key值的問題怎麼解決 redis批量刪除key值的問題怎麼解決 May 31, 2023 am 08:59 AM

遇到的問題:在開發過程中,會遇到要批量刪除某種規則的key,例如login_logID(ID為變數),現在需要刪除"login_log*"這一類的數據,但是redis本身只有批量查詢一類別key值的指令keys,但是沒有批次刪除某一個類別的指令。解決方法:先查詢,在刪除,使用xargs傳參(xargs可以將管道或標準輸入(stdin)資料轉換成命令列參數),先執行查詢語句,在將查詢出來的key值,當初del的參數去刪除。 redis-cliKEYSkey*(查找條件)|xargsr

不可修補的 Yubico 二因素驗證金鑰漏洞破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性 不可修補的 Yubico 二因素驗證金鑰漏洞破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性 Sep 04, 2024 pm 06:32 PM

無法修補的 Yubico 二因素驗證金鑰漏洞已經破壞了大多數 Yubikey 5、安全金鑰和 YubiHSM 2FA 設備的安全性。 Feitian A22 JavaCard和其他使用Infineon SLB96xx系列TPM的裝置也容易受到攻擊。

PHP傳回字串第一個字元的 ASCII 值 PHP傳回字串第一個字元的 ASCII 值 Mar 21, 2024 am 11:01 AM

這篇文章將為大家詳細講解有關PHP返回字符串第一個字符的ASCII值,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP傳回字串第一個字元的ASCII值引言在php中,取得字串第一個字元的ASCII值是一個常見的操作,涉及到字串處理和字元編碼基礎知識。 ASCII值用於表示字元在電腦系統中的數字值,對於字元比較、資料傳輸和儲存至關重要。過程取得字串第一個字元的ASCII值涉及以下步驟:取得字串:確定要取得ASCII值的字串。它可以是變數、字串常數

PHP傳回一個字串在另一個字串中開始位置到結束位置的字串 PHP傳回一個字串在另一個字串中開始位置到結束位置的字串 Mar 21, 2024 am 10:31 AM

這篇文章將為大家詳細講解有關PHP返回一個字符串在另一個字符串中開始位置到結束位置的字符串,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章後可以有所收穫。 PHP中使用substr()函數從字串中擷取子字串substr()函數可從字串中擷取指定範圍內的字元。其語法如下:substr(string,start,length)其中:string:要從中提取子字串的原始字串。 start:子字串開始位置的索引(從0開始)。 length(可選):子字串的長度。如果未指定,則提

如何在Java中判斷JSONObject是否包含某個鍵(key)? 如何在Java中判斷JSONObject是否包含某個鍵(key)? May 08, 2023 pm 12:25 PM

判斷JSONObject是否存在某個KeyJSONObjectjsonObj=newJSONObject();jsonObj.put("version","1.0.0");//版本號jsonObj.put("encoding","UTF-8");//編碼方式判斷jsonObject是否存在vesion屬性jsonObj.has("version");//回傳true檢查json字串中是否存在該k

Redis批次刪除key的指令怎麼使用 Redis批次刪除key的指令怎麼使用 May 26, 2023 pm 05:09 PM

redis中沒有直接根據正規表示式刪除key的指令,只有delkey1key2...指令但是redis中有透過正規表示式取得key的指令:keys"正規表示式"可以藉助於xargs指令實作批次刪除key,把查出來的key值當做參數傳給delredis-clikeys"mailspec*"|xargsdel完整指令:[root@localhostredis7001]#redis-cli-h192.169.1.71-p7001-a123456keysem*|x

See all articles