php5数字型字符串加解密代码

<?php
/* ----------------------------------------------------------------------------
* Script Name: encrypt.php
* Creation Date: 2008-4-7 10:36
* Last Modified: 2008-4-12 16:00
* Author: meyu
* Copyright (c) 2007
* Purpose: 数字字符串简易加解密
* ----------------------------------------------------------------------------*/

class Encryption {
    /**
     * 最终的密文代码,可设为任意不重复的10位英文字符a-zA-Z
     */
    private $replacement = 'urskydMeIV';

/**
     * 增加的密文第一位,可设为1位除0以外的整数,即 1-9
     */
    private $prefix = "8";

/**
     * 公钥,长度小于8位的正整数
     */
    private $match = "111111";

/**
     * 转换后对照数组
     */
    private $replaceenc;
    private $replacedec;

function __construct() {
        for($i =0; $i < 10; $i++) {
            $this->replaceenc['/'.$i.'/'] = $this->replacement{$i};
            $this->replacedec['/'.$this->replacement{$i}.'/'] = $i;
        }
    }

public function encrypt($str) {
        return preg_replace(
            array_keys($this->replaceenc),
            $this->replaceenc,
            $this->mynotin(preg_replace("/(.)(.)/", "${2}${1}", $str))
        );
    }

public function decrypt($str) {
        return preg_replace("/(.)(.)/", "${2}${1}",
            $this->mynotout(preg_replace(array_keys($this->replacedec),$this->replacedec,$str))
        );
    }

private function mynotin($str) {
        $str_out = "";
        $i = 0;
        while(isset($str{7*$i})) {
            $str_out .= (($this->prefix.substr($str, $i*7, 7))+0)^$this->match;
            $i++;
        }
        return $str_out;
    }

private function mynotout($str) {
        $str_out = "";
        $i = 0;
        while(isset($str{8*$i})) {
            $str_out .= substr((substr($str, $i*8, 8)+0)^$this->match, 1);
            $i++;
        }
        return $str_out;
    }
}
?>

(0)

相关推荐

  • php5数字型字符串加解密代码

    <?php /* ---------------------------------------------------------------------------- * Script Name: encrypt.php * Creation Date: 2008-4-7 10:36 * Last Modified: 2008-4-12 16:00 * Author: meyu * Copyright (c) 2007 * Purpose: 数字字符串简易加解密 * ------------

  • 基于Java解决华为机试之字符串加解密 

    目录 1.简述 2.示例1 2.代码实现 1.简述 描述: 1.对输入的字符串进行加解密,并输出. 2.加密方法为: 当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B:字母Z时则替换为a: 当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0: 其他字符不做变化. 3.解密方法为加密的逆过程. 本题含有多组样例输入. 数据范围:输入的两个字符串长度满足1 \le n \le 1000 \1≤n≤1000  ,保证输入的字符串都是大小写字母或者数字

  • JavaScript中把数字转换为字符串的程序代码

    1:把数字转换为字符串的方法 复制代码 代码如下: var string_value = String(number);     string_value = number.toString(); var n = 17;      binary_string = n.toString(2);                //Evaluates to "10001"      octal_string = "0" + n.toString(8);        //

  • Javascript C#真正可以交互的DES加解密代码

    因项目需要,要用js加密后,提交给C#解密, 在网上找了半天,网上有无数个版本,却找不到一个能互相使用的 甚至就连都是js版本的,都不能互通,汗一个. 因为时间关系,没有去深究加密代码,就随便下载了一个JS版本的, 并把它改写成C#版本的 这样JS加密后的结果,C#也能解密 反之C#加密后的结果,JS也能解密 我把它发出来给大家共享吧 注:源代码是VS.Net2008版本创建的,里面包含js的加解密函数和C#的加解密函数 如果你找到什么bug,或有啥好建议,不妨联系一下俺,呵呵: btw:在改写

  • C#字符串使用密钥进行加解密

    第一个为大家分享的是C#字符串使用密钥进行加解密代码,具体内容如下 public class DesEncrypt { /// <summary> /// 算法偏移量 /// </summary> const string m_IV = "12345678"; /// <summary> /// 功能描述:根据输入的密钥生成8位密钥 /// 作 者: 爱给模板网 2gei.cn /// 创建日期:2015-07-20 17:25:26 /// <

  • C# 数据库链接字符串加密解密工具代码详解

    有些项目尤其是WinForm或者是WPF项目,针对一些工具形式的小项目,不想软件流出去之后,懂程序的的拿到手之后一看配置文件就知道了我们数据库的用户名和密码,如果外网能访问的话,那就麻烦大了.所以这里为了防止项目外泄之后这些信息不被别人看到,我们就需要对链接字符串或者其他重要信息进行加密,用的时候在解密. 思路:使用两个数对连接字符串进行加密,再用这两个数进行解密. <add key="ConfigString" value="4HsXBRNXTkeN0ZoKdEwFE

  • PHP容易被忽略而出错陷阱 数字与字符串比较

    0 与任意非数字(或者说,不可转化为数字的字符)前导的字符串比较(操作符为==), 均返回 true. 原因是, 数字与字符串比较时, 先尝试将字符串转换为数字, 再比较, 一个不能转换为数字的字符串, 转换结果为0, 故, 与0比较总返回 true. 更加详细的比较规则, 多种类型的比较规则, 在 PHP手册/语言参考/运算符/比较运算符 可以找到. 在PHP里当两个数字型字符串(只含数字的字符串)进行比较的时候是直接转换成数值进行比较的 如下示例:(注意$a和$b两个变量的最后一位不相等)

  • 使用webservice自定义注解处理参数加解密问题

    目录 webservice自定义注解处理参数加解密 代码实现 webservice注解汇总 @WebService @WebMethod @Oneway @WebParam @WebResult @HandlerChain webservice自定义注解处理参数加解密 前一段项目中用到了webservice,正好自己之前也了解过一点apache的cxf框架,所以就采用了cxf来实现webservice服务端,本身实现并没技术难点,但是项目为了保证安全性,采用了传输加密的过程,所以大部分请求参数需

  • java加解密RSA使用方法代码示例

    最近为了分析一段请求流,不得不去研究一下RSA加密. 首先,强调一点:密钥的"钥"读"yue",不是"yao",额... 网上关于RSA的原理一抓一大把的,这里只是简单说说我的理解: 1. 两个足够大的互质数p, q: 2. 用于模运算的模 n=p*q: 3. 公钥KU(e, n)中的e满足 1<e< (p-1)(q-1),且与(p-1)(q-1)互质: 4. 密钥KR(d, n)中的d满足  d*e % (p-1)(q-1)= 1,

  • JAVA 实现磁盘文件加解密操作的示例代码

    简单实现了下: import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import java.io.*; import java.security.GeneralSecurityException; import java.security.SecureRandom; /** * 文件

随机推荐