首页 » 后端 » PHP » 正文

河南联通宽带账号加密算法 [附php、JS源码]

发布者:站点默认
2012/03/18 浏览数(6,727) 分类:PHP 评论(4)

说明:

河南联通宽带帐号(原网通)算号程序。关于算法就不多说了,自己看代码吧,^_^。

这里的 php 版代码由 vke 的《河南联通宽带账号算号C#源码》转换而来。感谢 vke 分享。

php 版代码:

/**
 * 说明:河南联通宽带账号算号器
 * 整理:root,/
 * 日期:13:00 2012年3月18日 星期日
 * 补充:C#版本请至http://www.udnz.com/code-2896.htm
 */
function cnc($num = '037988886666'){
	$string = "9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST";
	$mask = "25-35-182-236-43-41-53-18-226-215-24-117-35-201-52-17";
	$maskArray = explode('-',$mask);
	$maskArray = array_reverse($maskArray);
	$l = 37;$k = 0;$u = 0;$x = 0;
	$decodeString = str_repeat('x',strlen($num));
	for ($i = 0; $i < strlen($num); $i++){
		 for ($j = 0; $j < strlen($string); $j++){
			  if (substr($num,$i,1) == substr($string,$j,1)){
					if ($i < 16){
						 $u = (int)$maskArray[$i];
					}else{
						 $x = $i % 16;
						 $u = (int)$maskArray[$x];
					}
					$u = (($u ^ ($l * 3)) ^ $k) + $j;
					$x = $u % 62;
					$decodeString{$i} = substr($string,$x,strlen($x));
					$l = $l ^ ($x + 9433);
					break;
			  }
		 }
		 if ($decodeString{$i} == "") $string{$i} = $i;
		 $k = $k + 5;
	}
	return $num = "2:" . $decodeString;
}

用法:

<?php
	echo cnc('037966666666'); // output: 2:2v49tdIngbJq
?>

演示地址:

/cnc.php

JS版代码:

此JS版代码由 Wang qiang 提供,感谢Wang qiang 提供JS版的代码。Wang qiang来信问我能否加到博客里给需要的朋友们使用,而且不能联网的朋友们也可以使用哦~ 当然,需要浏览器支持JS的哈。以下是代码:

<!doctype html>
<html>
<head>
	<meta charset="utf-8" />
	<title>decodeCNC - version 1.0</title>
	<!--
	## decodeCNC ##
	version 1.0

	This program is to decode The CNC ADSL account(only for He'nan province).
	After decoding your account, there is no more need to use CNC client. 
	Also you can use a router to share your net with no limitation.

	This program is released under GPLv2 license.
	From more information, please visit http://www.gnu.org/.
	Report bugs to <qiangwangsky@163.com>.
	-->
	<script>
		String.prototype.repeat = function(num) {
			var output = '';
			var i = 0;
			for (i = 0; i < num; i++) {
				output += this;
			}
			return output;
		};

		var arr_repeat = function(str, num) {
			var output = new Array();
			var i = 0;
			for (i = 0; i < num; i++) {
				output.push(str);
			}
			return output;
		}
	</script>
	<script>
		var decodeCNC = function(num) {
			var baseStr = '9012345678abcdeABCDEFGHIJKLMNfghijklmnUVWXYZxyzuvwopqrstOPQRST';
			var mask = '25-35-182-236-43-41-53-18-226-215-24-117-35-201-52-17';
			var maskArray = mask.split('-').reverse();
			var l = 37, k = 0, u = 0, x = 0;
			var decodeString = arr_repeat('x', num.length);
			var i = 0, j = 0;

			for (i = 0; i < num.length; i++) {
				for (j = 0; j < baseStr.length; j++) {
					if (num.substr(i, 1) === baseStr.substr(j, 1)) {
						if (i < 16) {
							u = parseInt(maskArray[i]);
						} else {
							x = i % 16;
							u = parseInt(maskArray[x]);
						}

						u = ((u ^ (l * 3)) ^ k) + j;
						x = u % 62;
						decodeString[i] = baseStr.substr(x, x.toString().length).substr(0, 1);
						l = l ^ (x + 9433);
						break;
					}
				}
				if (decodeString[i] === '') {
					baseStr[i] = i;
				}
				k += 5;
			}
			return '2:' + decodeString.join('');
		}

		window.addEventListener('load', function() {
			document.getElementById('go').addEventListener('click', function() {
				var input = document.getElementById('input-num').value;

				document.getElementById('output-num').innerHTML = decodeCNC(input);
			}, false);
		}, false);
	</script>
	<style>
		#input-content {
		}
		#output-num {
			color: green;
		}
	</style>
</head>
<body>
	<div id="input-content">
		<input type="text" title="your CNC account" id="input-num" />
		<button id="go">Decode!</button>
		<p>Decoded number: <span id="output-num"></span></p>
	</div>
</body>
</html>

JS版代码下载地址:

decodeCNC.tar.gz

<完>

点击返回顶部
  1. 留言
  2. 联系方式