|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 xenli 于 2020-1-14 08:36 编辑
事由:原来的老系统是用delphi写的,最近想把老系统转换成B/S模式的,设计到了一个加密算法不知道怎么改,请教知道的大佬怎么解决。
功能:传入一组字符串,经过加密之后生成加密后的数据。
delphi的代码
- procedure TForm1.Button2Click(Sender: TObject);
- var
- strP,strend:string;
- tmpbyte1,tmpbyte2:byte;
- i:integer;
- a,b :Variant;
- begin
- strEnd:='asdfasdf';
- for i:=1 to length(strEnd) do
- begin
- a:= byte(strEnd[i]);
- tmpbyte1 := ord(strEnd[i]);
- tmpbyte2:=not tmpbyte1 ;
- b:=not tmpbyte1 ;
- strP:=strP+format('%s',[char(tmpbyte2)]);
- Edit2.Text := Edit2.Text + ' ' + VarToStr(a);
- Edit3.Text := Edit3.Text + ' ' + VarToStr(b);
- end;
- Edit1.Text := strP; //返回值:瀸洐瀸洐
- end;
复制代码
这是delphi得到的结果
转换成JavaScript,得到的结果不一致。
JavaScript的代码
- <body>
- <p>tmpbyte1:</p>
- <p>tmpbyte2:</p>
- <div id="infoBoard"></div><br />
- <button onclick="readpwd('asdfasdf')">加密</button>
- </body>
- <script type="text/javascript">
- var strP,strend,tmpbyte1,tmpbyte2,i;
- var infoBoard=document.getElementById("infoBoard");
- var myParagragh = document.getElementsByTagName("p")[0];
- var myParagragh1 = document.getElementsByTagName("p")[1];
- function readpwd(strEnd){
- for(var i=0;i<strEnd.length;i++){
- tmpbyte1=strEnd[i].charCodeAt();
- tmpbyte2=~tmpbyte1;
- strP=strP+String.fromCharCode(tmpbyte2);
- myParagragh.innerText = myParagragh.innerText + ' ' + tmpbyte1;
- myParagragh1.innerText = myParagragh1.innerText + ' ' + tmpbyte2;
- }
- infoBoard.innerText= 'js加密后:' + strP ;
- }
- </script>
复制代码 JavaScript的结果
从上图看出,两个tmpbyte1取反后的值完全不一致。
tmpbyte1取反后的值不一致可以使用下面的方式,不过你中文字符是通过什么算法出来的不清楚,就没有用JS实现了
<body>
<p>tmpbyte1:</p>
<p>tmpbyte2:</p>
<div id="infoBoard"></div><br />
<button onclick="readpwd('asdfasdf')">加密</button>
</body>
<script type="text/javascript">
var strP = '', // JS中不给变量设初始值是 undefined
strend, tmpbyte1, tmpbyte2, i;
var infoBoard = document.getElementById("infoBoard");
var myParagragh = document.getElementsByTagName("p")[0];
var myParagragh1 = document.getElementsByTagName("p")[1];
var charMax = 255; // 必需为 ASCII 字符才适合这个加密算法
function readpwd(strEnd) {
for (var i = 0; i < strEnd.length; i++) {
tmpbyte1 = strEnd[i].charCodeAt();
tmpbyte2 = (~tmpbyte1) & charMax;
tmpbyte2 = parseInt(tmpbyte2.toString(2), 2)
strP = strP + String.fromCharCode(tmpbyte2);
myParagragh.innerText = myParagragh.innerText + ' ' + tmpbyte1;
myParagragh1.innerText = myParagragh1.innerText + ' ' + tmpbyte2;
}
infoBoard.innerText = 'js加密后:' + strP;
}
</script>
|
|