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/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

发表回复

登录后才能评论