千家信息网

php和go按位异结果有什么不同

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要讲解了"php和go按位异结果有什么不同",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"php和go按位异结果有什么不同"吧!PHP的按位异
千家信息网最后更新 2025年01月19日php和go按位异结果有什么不同

这篇文章主要讲解了"php和go按位异结果有什么不同",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"php和go按位异结果有什么不同"吧!

  • PHP的按位异或

echo "'Y'的ASCII值是:" . ord('Y') . PHP_EOL;echo "8的ASCII值是:" . ord(8) . PHP_EOL;echo "'8'的ASCII值是:" . ord('8') . PHP_EOL;echo "'Y' ^ 8 = " . ('Y' ^ 8) . PHP_EOL; // 8echo "'Y' + 8 = " . ('Y' + 8) . PHP_EOL; // 8echo "'Y' ^ '8' = " . ('Y' ^ '8') . PHP_EOL; // aecho "89 ^ 8 = " . (89 ^ 8) . PHP_EOL; // 81echo "'89' ^ 8 = " . ('89' ^ 8) . PHP_EOL; // 81
#解析// Y ascii 89   ^  '8' ascii 56// 89 ^ 8  = 1011001//         ^ 0001000//         = 1010001 = 64 + 16 + 4 + 1 = 81// 89 ^ 56 = 1011001//         ^ 0111000//         = 1100001 = 64 + 32 + 1 = 97 = a
#结果'Y'的ASCII值是:898的ASCII值是:56'8'的ASCII值是:56'Y' ^ 8 = 8'Y' + 8 = 8'Y' ^ '8' = a89 ^ 8 = 81'89' ^ 8 = 81
小结

php 非数字字符串和整型 运算 时,取值为0


  • Go的按位异或

func main() {    fmt.Println("'Y' ^ 8 =", 'Y' ^ 8)    fmt.Println("'Y' ^ '8' =", 'Y' ^ '8')    fmt.Println("89 ^ 8 =", 89 ^ 8)}
#结果'Y' ^ 8 = 81'Y' ^ '8' = 9789 ^ 8 = 81
小结

go相对来说还是比较严谨,将rune都转为了对应ascii码值进行运算


扩展 网络上常用的一种加密解密算法

PHP实现

// 加密函数function encryptOp($string){        $string = str_replace(' ', '+', $string);//2019-9-8 16:36:12 把空格替换为+号,+号在传递过程中变成了空格;    $encryptKey = md5(rand(0, 32000));  // 用于加密的key    $init = 0; // 初始化变量长度    $tmp = '';    $strLen = strlen($string); // 待加密字符串的长度    $encryptKeyLen = strlen($encryptKey); // 加密key的长度    for ($index = 0; $index < $strLen; $index++) {        $init = $init == $encryptKeyLen ? 0 : $init; // 如果 $init = $encryptKey 的长度, 则 $init 清零        // $tmp 字串在末尾增加两位, 其第一位内容为 $encryptKey 的第 $init 位,        // 第二位内容为 $string 的第 $index 位与 $encryptKey 的 $init 位取异或。然后 $init = $init + 1        $tmp .= $encryptKey[$init] . ($string[$index] ^ $encryptKey[$init++]);    }    // 返回结果,结果为 passportKeyOp() 函数返回值的 base65 编码结果    return base64_encode(passportKeyOp($tmp));}// 密匙处理函数function passportKeyOp($string){    $encrypt_key = 'abcdefghijkl';    $encryptKey = md5($encrypt_key); // 加密的key    $init = 0;    $tmp = '';    $len = strlen($string);    $encryptKeyLen = strlen($encryptKey);    for ($index = 0; $index < $len; $index++) {        $init = $init == $encryptKeyLen ? 0 : $init;        $tmp .= $string[$index] ^ $encryptKey[$init++];    }    return $tmp;}// 解密函数function decryptOp($string){    $string = passportKeyOp(base64_decode($string));    $tmp = '';    $len = strlen($string);    for ($index = 0; $index < $len; $index++) {        if (!isset($string[$index]) || !isset($string[$index + 1])) {            return false;        }        $tmp .= $string[$index] ^ $string[++$index];    }    return $tmp;}$id = "123456";$idStr = encryptOp($id);echo $idStr . PHP_EOL;echo decryptOp($idStr) . PHP_EOL;

GO实现

package mainimport (        "crypto/md5"        "encoding/base64"        "fmt"        "math/rand"        "strconv"        "strings"        "time")func Md5(str string) string {        if str == "" {                return ""        }        init := md5.New()        init.Write([]byte(str))        return fmt.Sprintf("%x", init.Sum(nil))}func MtRand(min, max int64) int64 {        r := rand.New(rand.NewSource(time.Now().UnixNano()))        return r.Int63n(max-min+1) + min}func encryptOp(str string) string {        encryptKey := strconv.Itoa(int(MtRand(0, 32000)))        init := 0        tmp := ""        strPlus := []rune(str)        strLen := len(strPlus)        encryptKeyPlus := []rune(encryptKey)        encryptKeyLen := len(encryptKeyPlus)        for index := 0; index < strLen; index++ {                if init == encryptKeyLen {                        init = 0                }                strInt := int(strPlus[index])                encryptKeyInt := int(encryptKeyPlus[init])                tmp += string(encryptKeyPlus[init]) + string(rune(strInt ^ encryptKeyInt))                init++        }        sign := passportKeyOp(tmp)        sEnc := base64.StdEncoding.EncodeToString([]byte(sign))        return sEnc}func passportKeyOp(str string) string {        key := "abcdefghijkl"        encryptKey := Md5(key) // 加密的key        init := 0        result := ""        strPlus := []rune(str)        strLen := len(strPlus)        encryptKeyPlus := []rune(encryptKey)        encryptKeyLen := len(encryptKeyPlus)        for index := 0; index < strLen; index++ {                if init == encryptKeyLen {                        init = 0                }                result += string(rune(int(strPlus[index]) ^ int(encryptKeyPlus[init])))                init++        }        return result}func decryptOp(str string) string {        // 把空格替换为+号,+号在传递过程中变成了空格        str = strings.ReplaceAll(str, " ", "+")        sDec, _ := base64.StdEncoding.DecodeString(str)        str = passportKeyOp(string(sDec))        result := ""        strPlus := []rune(str)        strLen := len(strPlus)        for index := 0; index < strLen; index++ {                result += string(rune(int(strPlus[index]) ^ int(strPlus[index+1])))                index++        }        return result}func main() {        id := "123456"        idStr := encryptOp(id)        fmt.Println("idStr = ", idStr)        fmt.Println("id = ", decryptOp(idStr))}

感谢各位的阅读,以上就是"php和go按位异结果有什么不同"的内容了,经过本文的学习后,相信大家对php和go按位异结果有什么不同这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

结果 加密 不同 内容 函数 空格 长度 学习 字符 字符串 小结 过程 运算 严谨 加密解密 变量 就是 常用 思路 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发和工程项目的区别 计算机网络技术专业的认识 顺义区网络营销软件开发优势 上海智慧门禁软件开发怎么样 mcgs实时数据库的作用是什么 天津 软件开发有限公司 双线服务器怎么做线路 评价好的直销软件开发 宾馆网络安全检查表 广联达加密锁网络服务器怎么卸载 东莞无限软件开发供应商 防火墙怎么防护无线网络安全的 我的世界练起床技巧服务器 河源软件开发外包 中孚信息是网络安全公司吗 上海铁通dns服务器 服务器硬盘容量怎么看 原神私人服务器下载链接2.5 营运资金管理数据库 宁波余姚市企业服务器 广州正规软件开发价格 什么叫数据库技术 网络安全综合训练系统 标书 一卡通软件是什么软件开发的 退休网络安全事项 安全的联想ibm服务器 蒙商银行服务器招标文件 无线网络技术11章课后题 深圳大世界网络技术有限公司 派出所开展网络安全简报
0