没学过php 现在有一批php加密的数据要转译 php的加密解密如下 请帮忙翻译下 或者告知每一行代码的意义 function mymd5($string,$action="EN") { //字符串加密和解密 global $webdb,$onlineip;//$webdb系统的一些配置信息,$onlineip 客户端ip 这个函数好像没有用到 $secret_string = $webdb[mymd5].""5*j,.^&;?.%#@!""; //绝密字符串,可以任意设定 //$webdb[mymd5] 可以自己设置一个字符串 if($string=="") return ""; if($action=="EN") $md5code=substr(md5($string),8,10); //动作是加密,则取明文的MD5码的 8到10位字符 else//动作是解密(DE) { $md5code=substr($string,-10);//取$string后10个字符 $string=substr($string,0,strlen($string)-10);//把$string倒数十个字符去掉 } $key = md5($md5code.$secret_string);//密匙 $string = ($action=="EN"?$string:base64_decode($string));//如果动作是解密则将要解密的字符串进行MIME base64解码 $len = strlen($key); $code = ""; for($i=0; $i<strlen($string); $i++) { $k = $i%$len; $code .= $string[$i]^$key[$k]; } $code = ($action == "DE" ? (substr(md5($code),8,10)==$md5code?$code:NULL) : base64_encode($code)."$md5code"); return $code; } //mymd5($ccc,"EN") 加密 mymd5($ccc,"DE") 解密 |
|
10分 |
就是MD5 ,DES,BASE64加上一些控制算法的加密解密
中间有好几个方法需要调用的 |
请指点!
|
|
请指点! |
|
没有什么复杂的,核心是:
$code .= $string[$i]^$key[$k]; 异或加密 |
|
麻烦能给出c#代码吗 |
|
90分 |
static string mymd5(string str) { string secret_string = "5*j,.^&;?.%#@!"; string md5code = smd5(str).Substring(8, 10); string key = smd5(md5code + secret_string); var UTF8 = new System.Text.UTF8Encoding(); Byte[] bstr = UTF8.GetBytes(str); //将传入串转成字节数组 Byte[] bkey = UTF8.GetBytes(key); //将键转成字节数组 for (int i = 0, k = 0; i < bstr.Length; i++, k = i % bstr.Length) { bstr[i] ^= bkey[k]; } return Convert.ToBase64String(bstr) + md5code; } static string mymd5(string str, string action) { if (action == "EN") return mymd5(str); string secret_string = "5*j,.^&;?.%#@!"; string md5code = str.Substring(str.Length - 10, 10); str = str.Substring(0, str.Length - 10); string key = smd5(md5code + secret_string); var UTF8 = new System.Text.UTF8Encoding(); Byte[] bstr = Convert.FromBase64String(str); //将传入串正文做 base64 解码 Byte[] bkey = UTF8.GetBytes(key); //将键转成字节数组 for (int i = 0,k=0; i < bstr.Length; i++,k=i%bstr.Length) { bstr[i] ^= bkey[k]; } return UTF8.GetString(bstr); return base64_encode(UTF8.GetString(bstr)); } static string smd5(string str) { var md5 = MD5.Create(); byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); StringBuilder ret = new StringBuilder(); foreach (byte b in s) ret.Append(b.ToString("x2")); return ret.ToString(); } 本来以为很简单,没料到 C# 实在是太差劲了 |