php字符串按位異或(php 異或)

本文目錄一覽:

請教 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

其他語言如何解密PHP多字符串的異或加密

利用「^」異或運算對字符串進行加密

思路:1.先創建字符串輸入的Scanner;

2.通過char[] array = password.toCharArray();// 獲取字符數組;

3.遍歷字符數組,按目前理解要用到遍歷:數組所有元素進行訪問,比如你要輸出數組裡所有的信息時,就要用到

4.進行異或運算

按位做「異或」運算是:位值相同得1,不同得0

例如:

加密過程:

原解釋的二進制為 1 1 0 0 —-原文

設定的key的二進制為 0 1 1 0 —-密匙

兩者做「異或」結果為 0 1 0 1 —-密文

解密過程:

0 1 0 1—-密文

0 1 1 0—-密匙

兩者「異或」就得到了原文 1 1 0 0 —-原文

詳細代碼:

package com.lixiyu;

import java.util.Scanner;

public class Example {

public static void main(String[] args){

Scanner sca=new Scanner(System.in);

System.out.println(“請輸入一個英文字符串或解密字符串”);

String line=sca.nextLine();//獲取用戶輸入信息

char[] array=line.toCharArray();//獲取字符數組

for (int i=0;iarray.length;i++){//歷遍字符數組

array[i]=(char) (array[i]^20000);//對數組每個元素進行異或運算

}

System.out.println(“加密解密結果如下:”);

System.out.println(new String(array));//輸出密鑰

}

}

異或運算:

1 ^ 1 = 0

1 ^ 0 = 1

0 ^ 1 = 1

0 ^ 0 = 0

字符’A’ 的ASCII編碼為65 : 00000000 01000001

取整數7 : 00000000 00000000 00000000 00000111

XOR運算後 : 00000000 00000000 00000000 01000110

簡單加密算法代碼如下 :

public class Test {

public static final int KEY = 7;

public static void main(String[] args) {

String str = “Hello World!”;

StringBuffer str2 = new StringBuffer(); //存儲加密後的字符串

StringBuffer str3 = new StringBuffer(); //存儲解密後的字符串

//加密過程

for(int i=0;istr.length();i++)

{

char c = (char)(str.charAt(i) ^ KEY);

str2.append(c);

}

//解密過程

for(int i=0;istr2.length();i++)

{

char c = (char)(str2.charAt(i) ^ KEY);

str3.append(c);

}

System.out.println(“原始 的字符串為:” + str);

System.out.println(“加密後 的字符串為:” + str2);

System.out.println(“解密後 的字符串為:” + str3);

}

}

輸出:

原始 的字符串為:Hello World!

加密後 的字符串為:Obkkh’Phukc

解密後 的字符串為:Hello World!

php異或算法

如下 我個人習慣 ”—-“” []——–{}

其實我還沒做過加密 個人想法

原文 或運算 密碼模板 = 密文

有你提示

密文 或運算 密碼模板 =原文

?php

$str = “abcdef”;//源文

$tem = “qwertt”;//密碼模板

$mm1 = “”;//第一次或運算後密文

$mm2 = “”;//第二次或運算後密文—即原文

for($i = 0;$istrlen($str);$i++){

$mm1 .= $str{$i} ^ $tem{$i};

}

echo $mm1;//—-很少見的符號

echo “br/”;

for($i = 0;$istrlen($str);$i++){

$mm2 .= $mm1{$i} ^ $tem{$i};

}

echo $mm2;//—-abcdef

?

拓展:密碼模板不能太長 — 解決方法—改為某一個字符—-容易破解—改為若干字符—如下

?php

$str = “abcdef12546bf v vfd”;//源文

$tem = “abc”;//密碼模板

$mm1 = “”;//第一次或運算後密文

$mm2 = “”;//第二次或運算後密文—即原文

for($i = 0;$istrlen($str);$i++){

$j = $i % strlen($tem);

$mm1 .= $str{$i} ^ $tem{$j};

}

echo “mm1如下br/”;//

echo $mm1;//不曉得什麼原因若無上一行 沒顯示 但如果在上面$j前面加一個 echo

echo “br/”;

for($i = 0;$istrlen($str);$i++){

$j = $i % strlen($tem);

$mm2 .= $mm1{$i} ^ $tem{$j};

}

echo “原文如下br/”;

echo $mm2;

?

解釋:$j = $i % strlen($tem);依次取0 1 2 3 ….0 1 2 3 ….也就是把密碼模板中字符依次取出

—-到最後一個字符時—-再從頭開始取

疑惑:我用的時EclipsePHP 若無echo “mm1如下br/”;

下一行即echo $mm1無法在Browser顯示 但若在echo $mm1之前有其他echo 也可以顯示

拓展:$tem能可有特殊字符 數字 $str可有漢字

字符類型 變量 與字符類型變量異或的值這麼求解 例如 ‘1’^’1′ =? c語言 php’1’^’2′

你舉的例子是兩個相同的字符,他們各個位(bit)的值是一樣的,所以異或後結果為0吧。

我還是舉個不同的例子吧,’1′ ^ ‘2’

step1

字符’1’的ASCII碼值是49(10進制),

換算為16進制是0x31,

換算為2進制是00110001

step2

字符’2’的ASCII碼值是50(10進制),

換算為16進制是0x32,

換算為2進制是00110010

step3

做兩個二進制數的異或,即對應位不同的話,該位結果為1

00110001 異或

00110010

得到

00000011

即值為3(10進制)

PHP語言PHP語言里的位運算符&、|、^ 、~、〈〈 、〉〉這些符號我一個也不懂,希望高手給個全面的解釋!拜

“” 按位與運算

按位與運算符””是雙目運算符。其功能是參與運算的兩數各對應的二進位相與。只有對應的兩個二進位均為1時,結果位才為1,否則為0。參與運算的數以補碼方式出現。

例如:95可寫算式如下:

00001001 (9的二進制補碼)

00000101 (5的二進制補碼)

00000001 (1的二進制補碼)

?php

$a = 9;

$b = 5;

echo sprintf(“%b”, $a$b);

?

“|” 按位或運算

按位或運算符「|」是雙目運算符。其功能是參與運算的兩數各對應的二進位相或。只要對應的二個二進位有一個為1時,結果位就為1。參與運算的兩個數均以補碼出現。

例如:9|5可寫算式如下:

00001001

|00000101

00001101 (十進制為13)可見9|5=13

?php

$a = 9;

$b = 5;

echo sprintf(“%b”, $a|$b).”\n”; //二進制

echo sprintf(“%d”, $a|$b).”\n”; //十進制

“^” 按位異或運算

按位異或運算符「^」是雙目運算符。其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果為1。參與運算數仍以補碼出現,例如9^5可寫成算式如下:

00001001

^00000101

00001100 (十進制為12)

?php

$a = 9;

$b = 5;

echo sprintf(“%b”, $a^$b).”\n”; //二進制

echo sprintf(“%d”, $a^$b).”\n”; //十進制

“~” 求反運算

求反運算符~為單目運算符,具有右結合性。其功能是對參與運算的數的各二進位按位求反。

例如~9的運算為:

~(0000000000001001)結果為:1111111111110110

?php

$a = 9;

$b = 5;

echo sprintf(“%b”, ~$a).”\n”; //二進制

“〈〈” 左移運算

左移運算符「」是雙目運算符。其功能把「 」左邊的運算數的各二進位全部左移若干位,由「」右邊的數指定移動的位數,高位丟棄,低位補0。

例如:

a4

指把a的各二進位向左移動4位。如a=00000011(十進制3),左移4位後為00110000(十進制48)。

?php

$a = 3;

$temp = $a4;

echo sprintf(“%d”, $temp).”\n”; //十進制

「」 右移運算

右移運算符「」是雙目運算符。其功能是把「 」左邊的運算數的各二進位全部右移若干位,「」右邊的數指定移動的位數。

例如:

設 a=48,

a4

表示把00110000右移為00000011(十進制3)。

應該說明的是,對於有符號數,在右移時,符號位將隨同移動。當為正數時,最高位補0,而為負數時,符號位為1,最高位是補0或是補1 取決於編譯系統的規定

?php

$a = 48;

$temp = $a4;

echo sprintf(“%d”, $temp).”\n”; //十進制

php中字符變量 異或 ‘1’^’2′ 的值

?php

  echo (1^2).”\n”;

  echo (‘123’^’ACE’).”\n”;

?

你猜猜這個執行結果是什麼?

在PHP裏面,整數進行位運算的結果和C語言是相同的,這個你明白,我不多說。但是PHP的位運算更高級,如果左右參數都是字符串,則位運算符將操作字符的    ASCII 值。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/242781.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:52
下一篇 2024-12-12 12:52

相關推薦

  • PHP和Python哪個好找工作?

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

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

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

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

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

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

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

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

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

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python如何將字符串1234變成數字1234

    Python作為一種廣泛使用的編程語言,對於數字和字符串的處理提供了很多便捷的方式。如何將字符串「1234」轉化成數字「1234」呢?下面將從多個方面詳細闡述Python如何將字符…

    編程 2025-04-29
  • Python int轉二進制字符串

    本文將從以下幾個方面對Python中將int類型轉換為二進制字符串進行詳細闡述: 一、int類型和二進制字符串的定義 在Python中,int類型表示整數,二進制字符串則是由0和1…

    編程 2025-04-29
  • 用title和capitalize美觀處理Python字符串

    在Python中,字符串是最常用的數據類型之一。對字符串的美觀處理是我們在實際開發中經常需要的任務之一。Python內置了一些方法,如title和capitalize,可以幫助我們…

    編程 2025-04-28
  • Python 提取字符串中的電話號碼

    Python 是一種高級的、面向對象的編程語言,它具有簡單易學、開發迅速、代碼簡潔等特點,廣泛應用於 Web 開發、數據科學、人工智能等領域。在 Python 中,提取字符串中的電…

    編程 2025-04-28

發表回復

登錄後才能評論