php字符串加密解密,php加密教程

本文目錄一覽:

php SHA256WithRSA簽名驗簽&加密解密

使用:

$pri_key =””;

$pub_key = “”;

$char = ‘方方塊兒’;//要加密的字符

$sign = $this-RsaEncrypt($char,$pri_key);//加密結果

$result = $this-RsaDecrypt($sign,$pub_key);//對加密結果進行解密

加密:

public function RsaEncrypt($str,$pri_key){

        $pi_key =openssl_pkey_get_private($pri_key);

        if(!$pi_key)return false;//秘鑰不可用

       openssl_private_encrypt($str,$encrypted,$pi_key);

       $encrypted =base64_encode($encrypted);

       return $encrypted;

}

解密:

public function RsaDecrypt($str,$pub_key){

        $pu_key =openssl_pkey_get_public($pub_key);

        if(!$pu_key)return false;//秘鑰不可用

        openssl_public_decrypt(base64_decode($str),$decrypted,$pu_key);

        return $decrypted;

}

註:開啟PHP的php_openssl擴展

分享一個php加密方法,這個方法還比較實用

我們在開發過程中,有的時候GET傳值,字符串太長,我們可以用這個方法,在傳值之前先調用函數lock_url(加密字符串),加密以後在傳遞,GET接受以後用函數unlock_url(待解密字符串)進行解密。

如果大家有更好更簡單的方法,發評論區我們一起討論學習!

function lock_url($txt)

{

$key = ‘]!L]_w{O}zEIs!.f(T[|ZGQaxS”:?#`v%EburotLZi”KdKs@QivlJ[PjWw`.wcT’; //key

$chars = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+”;

$nh = rand(0,64);

$ch = $chars[$nh];

$mdKey = md5($key.$ch);

$mdKey = substr($mdKey,$nh%8, $nh%8+7);

$txt = base64_encode($txt);

$tmp = ”;

$i=0;$j=0;$k = 0;

for ($i=0; $istrlen($txt); p=”” {

$k = $k == strlen($mdKey) ? 0 : $k;

$j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;

$tmp .= $chars[$j];

}

return urlencode($ch.$tmp);

}

//解密函數

function unlock_url($txt)

{

$key = ‘]!L]_w{O}zEIs!.f(T[|ZGQaxS”:?#`v%EburotLZi”KdKs@QivlJ[PjWw`.wcT’;//key

$txt = urldecode($txt);

$chars = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+”;

$ch = $txt[0];

$nh = strpos($chars,$ch);

$mdKey = md5($key.$ch);

$mdKey = substr($mdKey,$nh%8, $nh%8+7);

$txt = substr($txt,1);

$tmp = ”;

$i=0;$j=0; $k = 0;

for ($i=0; $istrlen($txt); p=”” {

$k = $k == strlen($mdKey) ? 0 : $k;

$j = strpos($chars,$txt[$i])-$nh – ord($mdKey[$k++]);

while ($j0) $j+=64;

$tmp .= $chars[$j];

}

return base64_decode($tmp);

}

PHP解密Unicode及Escape加密字符串

在json中不支持中文,用它傳送中文數據就會出現數據丟失或者亂碼,必須在傳送前對要發送的字符串進行編碼,由於傳送過去需要用js進行數據解析,考慮

到js中有unescape函數,故若在php中有個escape函數,對數據進行編碼,在客戶端用unescape進行

解碼,這樣就會方便很多。

本文給大家分享一個PHP解密Unicode及Escape加密字符串函數

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

?php

function

uni_decode($s)

{

preg_match_all(‘/#([0-9]{2,5});/’,

$s,

$html_uni);

preg_match_all(‘/[%]u([0-9a-f]{4})/ie’,

$s,

$js_uni);

$source

=

array_merge($html_uni[0],

$js_uni[0]);

$js

=

array();

for($i=0;$icount($js_uni[1]);$i++)

{

$js[]

=

hexdec($js_uni[1][$i]);

}

$utf8

=

array_merge($html_uni[1],

$js);

$code

=

$s;

for($j=0;$jcount($utf8);$j++)

{

$code

=

str_replace($source[$j],

unicode2utf8($utf8[$j]),

$code);

}

return

$code;//$s;//preg_replace(‘/u([0-9a-f]{4})/ie’,

chr(hexdec(‘1’)),

$s);

}

function

unicode2utf8($c)

{

$str=;

if

($c

0x80)

{

$str.=chr($c);

}

else

if

($c

0x800)

{

$str.=chr(0xc0

|

$c6);

$str.=chr(0x80

|

$c

0x3f);

}

else

if

($c

0x10000)

{

$str.=chr(0xe0

|

$c12);

$str.=chr(0x80

|

$c6

0x3f);

$str.=chr(0x80

|

$c

0x3f);

}

else

if

($c

0x200000)

{

$str.=chr(0xf0

|

$c18);

$str.=chr(0x80

|

$c12

0x3f);

$str.=chr(0x80

|

$c6

0x3f);

$str.=chr(0x80

|

$c

0x3f);

}

return

$str;

}

$str=’%u5927%u5BB6%u597D%uFF0C我是孤魂!br

/u8FD9u662Fu6D4Bu8BD5u6587u672CuFF01′;

echo

uni_decode($str);

//

大家好,我是孤魂!這是測試文本!

在網上搜索一把,很多用php實現的escape函數,大同小異

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

function

phpescape($str){

preg_match_all(/[x80-xff].|[x01-x7f]+/,$str,$newstr);

$ar

=

$newstr[0];

foreach($ar

as

$k=$v){

if(ord($ar[$k])=127){

$tmpString=bin2hex(iconv(GBK,ucs-2,$v));

if

(!eregi(WIN,PHP_OS)){

$tmpString

=

substr($tmpString,2,2).substr($tmpString,0,2);

}

$reString.=%u.$tmpString;

}

else

{

$reString.=

rawurlencode($v);

}

}

return

$reString;

}

以上所述就是本文的全部內容了,希望大家能夠喜歡。

在php5中md5在加密字符串後如何解密

MD5加密是不能逆運算的,現在的破解大都是窮盡法,就是有一個龐大的MD5碼對照表放在那裡,然後一個一個去對照着查。

MD5是一種不可逆的加密算法,

什麼是不可逆呢?就是加了密後,就不能解了。

現在網上的諸多所謂的“MD5解密工具”其實都是暴力破解,什麼叫暴力破解呢?

那就是這些軟件都有一些“字典文件”,其實就是一些常用的字符串及其加密過後的md5密文,例:軟件首先把a加密成md5密文,然後用密文和現在要破解的密文進行比較,如果相同,那當然就破解了是a,如果不同,那麼依此繼續將b,c…作同樣的處理,也就是說,這些破解工具完全是用猜的,a不行猜b,b不行猜c,用循環一直往下猜。所以你想要找一個md5解密的軟件,我勸樓主還是省了這份心吧,因為這些軟件破解成功的機率很小。

PHP常用加密解密方法

作者/上善若水

1.md5(string $str,bool $flag = false);

$flag = false 默認返回32位的16進至數據散列值

$flag = true  返回原始流數據

2.sha1($string,$flag = false)

$flag = false 默認返回40位的16進至數據散列值

true  返回原始流數據

3.hash(string $algo,srting $str,bool $flag);

$algo : 算法名稱,可通過hash_algos()函數獲取所有hash加密的算法

如:md5,sha1等,採用md5,sha1加密所得結果和1,2兩種方式結 果相同。

$flag = false 默認返回16進至的數據散列值,具體長度根據算法不同

而不同。

true  返回原始流數據。

4.crypt(string $str,$string $salt);

函數返回使用 DES、Blowfish 或 MD5 算法加密的字符串。

具體算法依賴於PHP檢查之後支持的算法和$salt的格式和長度,當 然具體結果也和操作系統有關。比較結果採用 hash_equals($crypted,crypt($input,$salt));//且salt值相同

Password_verify($str,$crypted);

5.password_hash ( string $str, integer $algo [, array $options ] )

函數返回哈希加密後的密碼字符串, password_hash() 是crypt()的 一個簡單封裝

$algo : 算法 PASSWORD_DEFAULT ,PASSWORD_BCRYPT

$options = [

“cost”=10,//指明算法遞歸的層數,

“salt”=“xxadasdsad”//加密鹽值,即將被遺 棄,採用系統自動隨機生成安全性更高

];

使用的算法、cost 和鹽值作為哈希的一部分返回

Password_verify($str,$hashed);

6.base64_encode(string $str)

設計此種編碼是為了使二進制數據可以通過非純 8-bit 的傳輸層 傳輸,例如電子郵件的主體。base64_decode(string $encoded)

可以進行解碼;

7.mcrypt_encrypt ( string $cipher , string $key , string $data ,

string $mode [, string $iv ] )

mcrypt_decrypt ( string $cipher , string $key , string $crypted ,

string $mode [, string $iv ] )

$ciper:加密算法,mcrypt_list_algorithms()可以獲取該函數所有支持的算法

如MCRYPT_DES(“des”),MCRYPT_RIJNDAEL_128(“rijndael-128”);

$mode : 加密模式 ,mcrypt_list_modes()獲取所有支持的加密模式,ecb,cbc

$key: 加密的秘鑰,mcrypt_get_key_size ( string $cipher , string $mode )

獲取指定的算法和模式所需的密鑰長度。$key要滿足這個長度,如果長 度無效會報出警告。

$iv : 加密的初始向量,可通過mcrypt_create_iv ( int $size [, int $source = MCRYPT_DEV_URANDOM ] ),

Iv的參數size:

通過mcrypt_get_iv_size ( string $cipher , string $mode )獲取

Iv 的參數source:

初始向量數據來源。可選值有: MCRYPT_RAND (系統隨機數生成 器), MCRYPT_DEV_RANDOM (從 /dev/random 文件讀取數據) 和  MCRYPT_DEV_URANDOM (從 /dev/urandom 文件讀取數據)。 在 Windows 平台,PHP 5.3.0 之前的版本中,僅支持 MCRYPT_RAND。

請注意,在 PHP 5.6.0 之前的版本中, 此參數的默認值 為 MCRYPT_DEV_RANDOM。

Note: 需要注意的是,如果沒有更多可用的用來產生隨機數據的信息, 那麼 MCRYPT_DEV_RANDOM 可能進入阻塞狀態。

$data : 要加密的字符串數據

請教 php如何對字符串加密和解密,求一個相關的實例!

字符串加密解密算法

php5.5中有更為可靠和方便的加密方式。喜歡鑽研的朋友可以了解一下:

password_hash()

基於mcrypt擴展,按位異或總結的兩個字符串加密解密算法

?php

/**

* @info 字符串加密解密算法一,利用mcrypt擴展

* @param string $string 待處理字符串

* $action ENCODE,加密 | DECODE,解密

* @return string $returnstr

*/

functionmcrypt_handle_string($string,$action= ‘ENCODE’)

{

!is_array($string) orexit;

$action== ‘DECODE’ $string=base64_decode($string);

$key= “123456”;//key可自定義或在配置文件中獲取

$mcryptAlgorithm= MCRYPT_DES;//選擇一種加密算法

$mcryptMode= MCRYPT_MODE_ECB;//選擇一種加密模式

$mcryptIv= mcrypt_create_iv(mcrypt_get_iv_size($mcryptAlgorithm,$mcryptMode),MCRYPT_RAND);//創建初始化向量$returnstr=base64_encode(mcrypt_encrypt($mcryptAlgorithm,$key,$string,$mcryptMode,$mcryptIv));

if(‘DECODE’ ==$action)

{$returnstr=mcrypt_decrypt($mcryptAlgorithm,$key,$string,$mcryptMode,$mcryptIv);

}return$returnstr;

}

?php

/**

*

* @info 字符串加密解密算法二 利用按位異或

* @param string $string 待處理字符串

* @param $action ENCODE 加密 | DECODE 解密

* @return string*/

functionStrCode($string,$action= ‘ENCODE’)

{$action!= ‘ENCODE’ $string=base64_decode($string);

$code= ”;$key=substr(md5($GLOBALS[‘pwServer’][‘HTTP_USER_AGENT’] .$GLOBALS[‘db_hash’]),

8,18);$keyLen=strlen($key);

$strLen=strlen($string);

for($i= 0;$i$strLen;$i++)

{$k=$i%$keyLen;$code.=$string[$i] ^$key[$k];

}

return($action!= ‘DECODE’ ?base64_encode($code) :$code);

}

來源jingyan.baidu.com/m/article/e4d08ffdd1ca6b0fd2f60d13.html

原創文章,作者:SEVD,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/135378.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
SEVD的頭像SEVD
上一篇 2024-10-04 00:12
下一篇 2024-10-04 00:12

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變量類型,而是在變量第一次賦值時自動識別該變量的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬盤。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • Python中將字符串轉化為浮點數

    本文將介紹在Python中將字符串轉化為浮點數的常用方法。在介紹方法之前,我們先來思考一下這個問題應該如何解決。 一、eval函數 在Python中,最簡單、最常用的將字符串轉化為…

    編程 2025-04-29
  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python學習筆記:去除字符串最後一個字符的方法

    本文將從多個方面詳細闡述如何通過Python去除字符串最後一個字符,包括使用切片、pop()、刪除、替換等方法來實現。 一、字符串切片 在Python中,可以通過字符串切片的方式來…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29

發表回復

登錄後才能評論