实现客户端加密,后台解密
来源:互联网 发布:linux开telnet端口 编辑:程序博客网 时间:2024/05/17 21:45
项目要求对数据传输进行加密,即在客户端未提交的时候进行加密,到后台服务器端进行解密,也就是要求用脚本加密,java解密或者java加密,脚本解密,在网上找了许久,只找到了单纯一种语言的加密解密,不是脚本就是java的,于是下载一个脚本加解密程序,改写成java的,算法一样所以就实现了前后台的加密。贴出来供大家参考。
}
for(scnt=n=0;scnt<8;scnt++){
row=(b_array_dor[scnt*6+0]<<1)+b_array_dor[scnt*6+5];
col=(b_array_dor[scnt*6+1]<<3)+(b_array_dor[scnt*6+2]<<2)+(b_array_dor[scnt*6+3]<<1)+b_array_dor[scnt*6+4]
var sout=new Array(8);
sout[scnt]=g_s[scnt*64+(row<<4)+col];
for(i=3;i>=0;i--){
array_pout[n]=sout[scnt]>>i;
sout[scnt]=sout[scnt]-(array_pout[n++]<<i);
}
}
for(i=0;i<32;i++){
b_array_fout[i]=array_pout[g_p[i]-1];
//if(cnt==2)
//document.writeln(b_array_fout[i]);
public int[] lshift(int[] p_Array) { //循环左移一位
int[] tmp_Array = new int[28];
for (int i = 0; i < 27; i++) {
tmp_Array[i] = p_Array[i + 1];
}
tmp_Array[27] = p_Array[0];
return tmp_Array;
for (int cnt = 0; cnt < 16; cnt++) {
b_array_fn = frk(b_array_r, cnt);
strout += (char)sum;
sum=0;
//System.out.println(sum);
//document.write(String.fromCharCode(sum));
}
脚本encrypt.js
var g_keyOut=new Array(768);
var g_ip=new Array( //��ʼ�û�ip
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7
);
var g_invip=new Array( //���ʼ�û�ip
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25
);
58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7
);
var g_invip=new Array( //���ʼ�û�ip
40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25
);
var g_e=new Array( //e ѡλ��
32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,31
);
32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,31
);
var g_p=new Array( //p ѡλ��
16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25
);
16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25
);
var g_s=new Array( //8��s��
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
);
14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13,
15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9,
10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12,
7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14,
2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3,
12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13,
4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11
);
function InitKey(str_Key)
{
{
var pc1=new Array( //��64bit��Կ�����û�Ϊ56λ
57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4
);
var pc2=new Array( //�Ծ�����λ�õ���64bitѡλ�õ�48λ��Կ
14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32
);
var nls=new Array(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);
57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4
);
var pc2=new Array( //�Ծ�����λ�õ���64bitѡλ�õ�48λ��Կ
14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32
);
var nls=new Array(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);
var b_array_key = new Array(64);
for(n=i=0;i<8;i++)
b_array_key[n++]=str_Key.charCodeAt(i)>>i&0x01; //��ö�����
for(n=i=0;i<8;i++)
b_array_key[n++]=str_Key.charCodeAt(i)>>i&0x01; //��ö�����
var cd=new Array(56);
var c=new Array(28);
var d=new Array(28);
var c=new Array(28);
var d=new Array(28);
for(i=0;i<56;i++)
cd[i]=b_array_key[pc1[i]-1];
for(i=0;i<28;i++){
c[i]=cd[i];
d[i]=cd[i+28]; //����c,d
}
for(cnt=0;cnt<16;cnt++){
for(i=0;i<nls[cnt];i++){
c=lshift(c);
d=lshift(d);
}
for(i=0;i<28;i++){
cd[i]=c[i];
cd[28+i]=d[i];
}
for(i=0;i<48;i++){
g_keyOut[cnt*48+i]=cd[pc2[i]-1];
}
}
}
function lshift(p_Array) //ѭ������һλ
{
var tmp_Array=new Array(28);
for(i=0;i<27;i++) tmp_Array[i]=p_Array[i+1];
tmp_Array[27]=p_Array[0];
return tmp_Array;
cd[i]=b_array_key[pc1[i]-1];
for(i=0;i<28;i++){
c[i]=cd[i];
d[i]=cd[i+28]; //����c,d
}
for(cnt=0;cnt<16;cnt++){
for(i=0;i<nls[cnt];i++){
c=lshift(c);
d=lshift(d);
}
for(i=0;i<28;i++){
cd[i]=c[i];
cd[28+i]=d[i];
}
for(i=0;i<48;i++){
g_keyOut[cnt*48+i]=cd[pc2[i]-1];
}
}
}
function lshift(p_Array) //ѭ������һλ
{
var tmp_Array=new Array(28);
for(i=0;i<27;i++) tmp_Array[i]=p_Array[i+1];
tmp_Array[27]=p_Array[0];
return tmp_Array;
}
function frk(p_array_r,cnt)
{
var b_array_fout=new Array(32);
var b_array_expand=new Array(48);
var array_pout=new Array(48);
if(cnt==2)
for(i=0;i<p_array_r.length;i++){
//document.writeln(p_array_r[i]);
}
{
var b_array_fout=new Array(32);
var b_array_expand=new Array(48);
var array_pout=new Array(48);
if(cnt==2)
for(i=0;i<p_array_r.length;i++){
//document.writeln(p_array_r[i]);
}
for(i=0;i<48;i++){ //��32λת��Ϊ48λ
//if(cnt==2)
//document.writeln(p_array_r[g_e[i]-1]);
b_array_expand[i]=p_array_r[g_e[i]-1];
}
var b_array_dor = new Array(48);
for(i=0;i<48;i++){ //������Կki��λ���8�飬ÿ��6bit
//if(cnt==2)
//document.writeln(g_keyOut[cnt*48+i]);
var be;
if(g_keyOut[cnt*48+i]){
be= g_keyOut[cnt*48+i];
}
else{
be= 0;
}
b_array_dor[i]= b_array_expand[i]^be;
//if(cnt==2)
//document.writeln(p_array_r[g_e[i]-1]);
b_array_expand[i]=p_array_r[g_e[i]-1];
}
var b_array_dor = new Array(48);
for(i=0;i<48;i++){ //������Կki��λ���8�飬ÿ��6bit
//if(cnt==2)
//document.writeln(g_keyOut[cnt*48+i]);
var be;
if(g_keyOut[cnt*48+i]){
be= g_keyOut[cnt*48+i];
}
else{
be= 0;
}
b_array_dor[i]= b_array_expand[i]^be;
}
for(scnt=n=0;scnt<8;scnt++){
row=(b_array_dor[scnt*6+0]<<1)+b_array_dor[scnt*6+5];
col=(b_array_dor[scnt*6+1]<<3)+(b_array_dor[scnt*6+2]<<2)+(b_array_dor[scnt*6+3]<<1)+b_array_dor[scnt*6+4]
var sout=new Array(8);
sout[scnt]=g_s[scnt*64+(row<<4)+col];
for(i=3;i>=0;i--){
array_pout[n]=sout[scnt]>>i;
sout[scnt]=sout[scnt]-(array_pout[n++]<<i);
}
}
for(i=0;i<32;i++){
b_array_fout[i]=array_pout[g_p[i]-1];
//if(cnt==2)
//document.writeln(b_array_fout[i]);
}
return b_array_fout;
}
}
function Des_EnCrypt(str_input) //����
{
// InitKey(/"454554454/"); //only test , here
{
// InitKey(/"454554454/"); //only test , here
var b_array_input = new Array(64);
var b_array_lr = new Array(64);
var b_array_l = new Array(32);
var b_array_r = new Array(32);
var b_array_fn = new Array(32);
var b_array_lr = new Array(64);
var b_array_l = new Array(32);
var b_array_r = new Array(32);
var b_array_fn = new Array(32);
for(n=i=0;i<8;i++)
for(j=0;j<8;j++) {
//alert(str_input.charCodeAt(i));
b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01; //��ö�����
//alert(str_input.charCodeAt(i)>>j&0x01);
}
for(j=0;j<8;j++) {
//alert(str_input.charCodeAt(i));
b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01; //��ö�����
//alert(str_input.charCodeAt(i)>>j&0x01);
}
for(i=0;i<64;i++){
b_array_lr[i]=b_array_input[g_ip[i]-1];
b_array_lr[i]=b_array_input[g_ip[i]-1];
if(i<32){ b_array_l[i] = b_array_lr[i];
}
else { b_array_r[i-32] = b_array_lr[i];
else { b_array_r[i-32] = b_array_lr[i];
} //����l,r
}
}
for(cnt=0;cnt<16;cnt++)
{
{
b_array_fn=frk(b_array_r,cnt);
for(i=0;i<32;i++){
//document.writeln(b_array_fn[i]);
j=b_array_r[i];
b_array_r[i]=b_array_l[i]^b_array_fn[i];
b_array_l[i]=j;
//document.writeln(j);
//alert(b_array_r[i]);
}
for(i=0;i<32;i++){
//document.writeln(b_array_fn[i]);
j=b_array_r[i];
b_array_r[i]=b_array_l[i]^b_array_fn[i];
b_array_l[i]=j;
//document.writeln(j);
//alert(b_array_r[i]);
}
}
for(i=0;i<32;i++){
b_array_lr[i]=b_array_r[i];
b_array_lr[i+32]=b_array_l[i];
//document.writeln(b_array_r[i]);
}
b_array_lr[i]=b_array_r[i];
b_array_lr[i+32]=b_array_l[i];
//document.writeln(b_array_r[i]);
}
var fout=new Array(64);
for(i=0;i<64;i++) {fout[i]=b_array_lr[g_invip[i]-1];
//document.writeln(b_array_lr[i]);
}
var strout=/"/";
for(i=0;i<8;i++){
sum=0;
for(j=0;j<8;j++){
//document.writeln(fout[i*8+j]<<j);
sum+=(fout[i*8+j]<<j);
// document.writeln(sum);
}
for(i=0;i<64;i++) {fout[i]=b_array_lr[g_invip[i]-1];
//document.writeln(b_array_lr[i]);
}
var strout=/"/";
for(i=0;i<8;i++){
sum=0;
for(j=0;j<8;j++){
//document.writeln(fout[i*8+j]<<j);
sum+=(fout[i*8+j]<<j);
// document.writeln(sum);
}
//alert(String.fromCharCode(sum));
strout+=String.fromCharCode(sum);
//document.write(String.fromCharCode(sum));
}
strout+=String.fromCharCode(sum);
//document.write(String.fromCharCode(sum));
}
return strout;
}
function Des_deCrypt(str_input) //����
{
var b_array_input = new Array(64);
var b_array_lr = new Array(64);
var b_array_l = new Array(32);
var b_array_r = new Array(32);
var b_array_fn = new Array(32);
function Des_deCrypt(str_input) //����
{
var b_array_input = new Array(64);
var b_array_lr = new Array(64);
var b_array_l = new Array(32);
var b_array_r = new Array(32);
var b_array_fn = new Array(32);
for(n=i=0;i<8;i++)
for(j=0;j<8;j++)
b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01; //��ö�����
for(j=0;j<8;j++)
b_array_input[n++]=str_input.charCodeAt(i)>>j&0x01; //��ö�����
for(i=0;i<64;i++){
b_array_lr[i]=b_array_input[g_ip[i]-1];
if(i<32) b_array_l[i] = b_array_lr[i];
else b_array_r[i-32] = b_array_lr[i]; //����l,r
}
b_array_lr[i]=b_array_input[g_ip[i]-1];
if(i<32) b_array_l[i] = b_array_lr[i];
else b_array_r[i-32] = b_array_lr[i]; //����l,r
}
for(cnt=15;cnt>=0;cnt--)
{
b_array_fn=frk(b_array_r,cnt);
for(i=0;i<32;i++){
j=b_array_r[i];
b_array_r[i]=b_array_l[i]^b_array_fn[i];
b_array_l[i]=j;
}
}
{
b_array_fn=frk(b_array_r,cnt);
for(i=0;i<32;i++){
j=b_array_r[i];
b_array_r[i]=b_array_l[i]^b_array_fn[i];
b_array_l[i]=j;
}
}
for(i=0;i<32;i++){
b_array_lr[i]=b_array_r[i];
b_array_lr[i+32]=b_array_l[i];
}
b_array_lr[i]=b_array_r[i];
b_array_lr[i+32]=b_array_l[i];
}
var fout=new Array(64);
for(i=0;i<64;i++) fout[i]=b_array_lr[g_invip[i]-1];
var strout=/"/";
for(i=0;i<8;i++){
sum=0;
for(j=0;j<8;j++){
sum+=(fout[i*8+j]<<j);
}
strout+=String.fromCharCode(sum);
}
return strout;
}
for(i=0;i<64;i++) fout[i]=b_array_lr[g_invip[i]-1];
var strout=/"/";
for(i=0;i<8;i++){
sum=0;
for(j=0;j<8;j++){
sum+=(fout[i*8+j]<<j);
}
strout+=String.fromCharCode(sum);
}
return strout;
}
// Test
//document.write (/'<br>/'+Des_EnCrypt(/'12345678/'));
//document.write (/'<br>/'+Des_deCrypt(Des_EnCrypt(/'1/')));
// Test
//document.write (/'<br>/'+Des_EnCrypt(/'12345678/'));
//document.write (/'<br>/'+Des_deCrypt(Des_EnCrypt(/'1/')));
// Test
java版 Ecrypt.java
public class Encrypt {
public Encrypt() {
}
int[] g_ip = new int[] { //初始置换ip
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};
int[] g_invip = new int[] { //逆初始置换ip
40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63,
31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21,
61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,
19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9,
49, 17, 57, 25
};
public Encrypt() {
}
int[] g_ip = new int[] { //初始置换ip
58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4,
62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8,
57, 49, 41, 33, 25, 17, 9, 1, 59, 51, 43, 35, 27, 19, 11, 3,
61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, 39, 31, 23, 15, 7
};
int[] g_invip = new int[] { //逆初始置换ip
40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63,
31, 38, 6, 46, 14, 54, 22, 62, 30, 37, 5, 45, 13, 53, 21,
61, 29, 36, 4, 44, 12, 52, 20, 60, 28, 35, 3, 43, 11, 51,
19, 59, 27, 34, 2, 42, 10, 50, 18, 58, 26, 33, 1, 41, 9,
49, 17, 57, 25
};
int[] g_e = new int[] { //e 选位表
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12,
13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24,
25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 31
};
32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12,
13, 14, 15, 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24,
25, 24, 25, 26, 27, 28, 29, 28, 29, 30, 31, 32, 31
};
int[] g_p = new int[] { //p 选位表
16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2,
8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
};
16, 7, 20, 21, 29, 12, 28, 17, 1, 15, 23, 26, 5, 18, 31, 10, 2,
8, 24, 14, 32, 27, 3, 9, 19, 13, 30, 6, 22, 11, 4, 25
};
int[] g_s = new int[] { //8个s合
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7,
4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6,
2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5,
11, 3, 14, 10, 0, 6, 13,
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4,
7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10,
4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2,
11, 6, 7, 12, 0, 5, 14, 9,
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0,
9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15,
3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4,
15, 14, 3, 11, 5, 2, 12,
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8,
11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12,
11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8,
9, 4, 5, 11, 12, 7, 2, 14,
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11,
2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10,
13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2,
13, 6, 15, 0, 9, 10, 4, 5, 3,
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15,
4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2,
8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10,
11, 14, 1, 7, 6, 0, 8, 13,
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0,
11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13,
12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10,
7, 9, 5, 0, 15, 14, 2, 3, 12,
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15,
13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9,
12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8,
13, 15, 12, 9, 0, 3, 5, 6, 11
};
14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7, 0, 15, 7,
4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8, 4, 1, 14, 8, 13, 6,
2, 11, 15, 12, 9, 7, 3, 10, 5, 0, 15, 12, 8, 2, 4, 9, 1, 7, 5,
11, 3, 14, 10, 0, 6, 13,
15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10, 3, 13, 4,
7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5, 0, 14, 7, 11, 10,
4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15, 13, 8, 10, 1, 3, 15, 4, 2,
11, 6, 7, 12, 0, 5, 14, 9,
10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8, 13, 7, 0,
9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1, 13, 6, 4, 9, 8, 15,
3, 0, 11, 1, 2, 12, 5, 10, 14, 7, 1, 10, 13, 0, 6, 9, 8, 7, 4,
15, 14, 3, 11, 5, 2, 12,
7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15, 13, 8,
11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9, 10, 6, 9, 0, 12,
11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4, 3, 15, 0, 6, 10, 1, 13, 8,
9, 4, 5, 11, 12, 7, 2, 14,
2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9, 14, 11,
2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6, 4, 2, 1, 11, 10,
13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14, 11, 8, 12, 7, 1, 14, 2,
13, 6, 15, 0, 9, 10, 4, 5, 3,
12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11, 10, 15,
4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8, 9, 14, 15, 5, 2,
8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6, 4, 3, 2, 12, 9, 5, 15, 10,
11, 14, 1, 7, 6, 0, 8, 13,
4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1, 13, 0,
11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6, 1, 4, 11, 13,
12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2, 6, 11, 13, 8, 1, 4, 10,
7, 9, 5, 0, 15, 14, 2, 3, 12,
13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7, 1, 15,
13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2, 7, 11, 4, 1, 9,
12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8, 2, 1, 14, 7, 4, 10, 8,
13, 15, 12, 9, 0, 3, 5, 6, 11
};
int[] g_keyOut = new int[768];
public void InitKey(String str_Key) {
int i, n;
int[] pc1 = new int[] { //对64bit密钥进行置换为56位
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10,
2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55,
47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61,
53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
};
int[] pc2 = new int[] { //对经过移位得到的64bit选位得到48位密钥
14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4,
26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30,
40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,
29, 32
};
int[] nls = new int[] {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
int i, n;
int[] pc1 = new int[] { //对64bit密钥进行置换为56位
57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10,
2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55,
47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61,
53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4
};
int[] pc2 = new int[] { //对经过移位得到的64bit选位得到48位密钥
14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4,
26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30,
40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36,
29, 32
};
int[] nls = new int[] {1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1};
int[] b_array_key = new int[64];
char s = /'s/';
char s = /'s/';
for (n = i = 0; i < 8; i++) {
int bt1 = (int) str_Key.charAt(i);
bt1 >>= i;
bt1 &= 0x01;
b_array_key[n++] = bt1; //获得二进制
}
int[] cd = new int[56];
int[] c = new int[28];
int[] d = new int[28];
int bt1 = (int) str_Key.charAt(i);
bt1 >>= i;
bt1 &= 0x01;
b_array_key[n++] = bt1; //获得二进制
}
int[] cd = new int[56];
int[] c = new int[28];
int[] d = new int[28];
for (i = 0; i < 56; i++) {
cd[i] = b_array_key[pc1[i] - 1];
}
for (i = 0; i < 28; i++) {
c[i] = cd[i];
d[i] = cd[i + 28]; //分离c,d
}
for (int cnt = 0; cnt < 16; cnt++) {
for (i = 0; i < nls[cnt]; i++) {
c = lshift(c);
d = lshift(d);
}
for (i = 0; i < 28; i++) {
cd[i] = c[i];
cd[28 + i] = d[i];
}
for (i = 0; i < 48; i++) {
g_keyOut[cnt * 48 + i] = cd[pc2[i] - 1];
}
}
}
cd[i] = b_array_key[pc1[i] - 1];
}
for (i = 0; i < 28; i++) {
c[i] = cd[i];
d[i] = cd[i + 28]; //分离c,d
}
for (int cnt = 0; cnt < 16; cnt++) {
for (i = 0; i < nls[cnt]; i++) {
c = lshift(c);
d = lshift(d);
}
for (i = 0; i < 28; i++) {
cd[i] = c[i];
cd[28 + i] = d[i];
}
for (i = 0; i < 48; i++) {
g_keyOut[cnt * 48 + i] = cd[pc2[i] - 1];
}
}
}
public int[] lshift(int[] p_Array) { //循环左移一位
int[] tmp_Array = new int[28];
for (int i = 0; i < 27; i++) {
tmp_Array[i] = p_Array[i + 1];
}
tmp_Array[27] = p_Array[0];
return tmp_Array;
}
public int[] frk(int[] p_array_r, int cnt) {
int i, scnt, n;
int[] b_array_fout = new int[32];
int[] b_array_expand = new int[48];
int[] array_pout = new int[48];
int i, scnt, n;
int[] b_array_fout = new int[32];
int[] b_array_expand = new int[48];
int[] array_pout = new int[48];
if(cnt==2)
for(i=0;i<p_array_r.length;i++){
//System.out.print(p_array_r[i]);
}
for (i = 0; i < 48; i++) { //将32位转换为48位
//if(cnt==2)
//System.out.print(p_array_r[g_e[i] - 1]);
b_array_expand[i] = p_array_r[g_e[i] - 1];
}
int[] b_array_dor = new int[48];
for (i = 0; i < 48; i++) { //再与密钥ki按位异或,8组,每组6bit
int be = b_array_expand[i];
//if(cnt==2)
// System.out.print(be);
int be2 = g_keyOut[cnt * 48 + i];
be ^= be2;
//if(cnt==2)
//System.out.print(be2);
b_array_dor[i] = be;
//if(cnt==2)
//System.out.print(b_array_dor[i]);
for(i=0;i<p_array_r.length;i++){
//System.out.print(p_array_r[i]);
}
for (i = 0; i < 48; i++) { //将32位转换为48位
//if(cnt==2)
//System.out.print(p_array_r[g_e[i] - 1]);
b_array_expand[i] = p_array_r[g_e[i] - 1];
}
int[] b_array_dor = new int[48];
for (i = 0; i < 48; i++) { //再与密钥ki按位异或,8组,每组6bit
int be = b_array_expand[i];
//if(cnt==2)
// System.out.print(be);
int be2 = g_keyOut[cnt * 48 + i];
be ^= be2;
//if(cnt==2)
//System.out.print(be2);
b_array_dor[i] = be;
//if(cnt==2)
//System.out.print(b_array_dor[i]);
}
for (scnt = n = 0; scnt < 8; scnt++) {
int bdor = b_array_dor[scnt * 6 + 0];
bdor <<= 1;
int bdor2 = b_array_dor[scnt * 6 + 5];
bdor += bdor2;
for (scnt = n = 0; scnt < 8; scnt++) {
int bdor = b_array_dor[scnt * 6 + 0];
bdor <<= 1;
int bdor2 = b_array_dor[scnt * 6 + 5];
bdor += bdor2;
int colbt1 = b_array_dor[scnt * 6 + 1];
int colbt2 = b_array_dor[scnt * 6 + 2];
int colbt3 = b_array_dor[scnt * 6 + 3];
int colbt4 = b_array_dor[scnt * 6 + 4];
colbt1 <<= 3;
colbt2 <<= 2;
colbt3 <<= 1;
colbt1 += colbt2;
colbt1 += colbt3;
colbt1 += colbt4;
int row = bdor;
int col = colbt1;
int[] sout = new int[8];
sout[scnt] = g_s[scnt * 64 + (row << 4) + col];
for (i = 3; i >= 0; i--) {
int soutb = sout[scnt];
soutb >>= i;
array_pout[n] = soutb;
int poutb = array_pout[n++];
poutb <<= i;
int colbt2 = b_array_dor[scnt * 6 + 2];
int colbt3 = b_array_dor[scnt * 6 + 3];
int colbt4 = b_array_dor[scnt * 6 + 4];
colbt1 <<= 3;
colbt2 <<= 2;
colbt3 <<= 1;
colbt1 += colbt2;
colbt1 += colbt3;
colbt1 += colbt4;
int row = bdor;
int col = colbt1;
int[] sout = new int[8];
sout[scnt] = g_s[scnt * 64 + (row << 4) + col];
for (i = 3; i >= 0; i--) {
int soutb = sout[scnt];
soutb >>= i;
array_pout[n] = soutb;
int poutb = array_pout[n++];
poutb <<= i;
sout[scnt] -= poutb;
}
}
for (i = 0; i < 32; i++) {
}
}
for (i = 0; i < 32; i++) {
b_array_fout[i] = array_pout[g_p[i] - 1];
//if(cnt==2)
// System.out.print(b_array_fout[i]);
}
//if(cnt==2)
// System.out.print(b_array_fout[i]);
}
return b_array_fout;
}
}
public String Des_EnCrypt(String str_input) { //加密
// InitKey(/"454554454/"); //only test , here
int n, i, j,sum;
// int sum;
String strout = /"/";
int[] b_array_input = new int[64];
int[] b_array_lr = new int[64];
int[] b_array_l = new int[32];
int[] b_array_r = new int[32];
int[] b_array_fn = new int[32];
// InitKey(/"454554454/"); //only test , here
int n, i, j,sum;
// int sum;
String strout = /"/";
int[] b_array_input = new int[64];
int[] b_array_lr = new int[64];
int[] b_array_l = new int[32];
int[] b_array_r = new int[32];
int[] b_array_fn = new int[32];
for (n = i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
int bt1=0;
if(i<str_input.length()){
bt1 = (int) str_input.charAt(i);
}else{
bt1=0;
}
//System.out.println(bt1);
bt1 >>= j;
bt1 &= 0x01;
b_array_input[n++] = bt1;
int bt1=0;
if(i<str_input.length()){
bt1 = (int) str_input.charAt(i);
}else{
bt1=0;
}
//System.out.println(bt1);
bt1 >>= j;
bt1 &= 0x01;
b_array_input[n++] = bt1;
//获得二进制
}
}
}
}
for (i = 0; i < 64; i++) {
b_array_lr[i] = b_array_input[g_ip[i] - 1];
b_array_lr[i] = b_array_input[g_ip[i] - 1];
if (i < 32) {
b_array_l[i] = b_array_lr[i];
b_array_l[i] = b_array_lr[i];
} else {
b_array_r[i - 32] = b_array_lr[i]; //分离l,r
b_array_r[i - 32] = b_array_lr[i]; //分离l,r
}
}
}
for (int cnt = 0; cnt < 16; cnt++) {
b_array_fn = frk(b_array_r, cnt);
for (i = 0; i < 32; i++) {
//System.out.print(b_array_fn[i]);
int bj = b_array_r[i];
int aryl = b_array_l[i];
int aryfn = b_array_fn[i];
aryl ^= aryfn;
b_array_r[i] = aryl;
b_array_l[i] = bj;
//System.out.print(bj);
//System.out.println(aryfn);
}
}
//System.out.print(b_array_fn[i]);
int bj = b_array_r[i];
int aryl = b_array_l[i];
int aryfn = b_array_fn[i];
aryl ^= aryfn;
b_array_r[i] = aryl;
b_array_l[i] = bj;
//System.out.print(bj);
//System.out.println(aryfn);
}
}
for (i = 0; i < 32; i++) {
b_array_lr[i] = b_array_r[i];
b_array_lr[i + 32] = b_array_l[i];
//System.out.print(b_array_r[i]);
}
b_array_lr[i] = b_array_r[i];
b_array_lr[i + 32] = b_array_l[i];
//System.out.print(b_array_r[i]);
}
int[] fout = new int[64];
for (i = 0; i < 64; i++) {
fout[i] = b_array_lr[g_invip[i] - 1];
//System.out.print(b_array_lr[i]);
//System.out.print(fout[i]);
}
for (i = 0; i < 64; i++) {
fout[i] = b_array_lr[g_invip[i] - 1];
//System.out.print(b_array_lr[i]);
//System.out.print(fout[i]);
}
for (i = 0; i < 8; i++) {
sum = 0;
for (j = 0; j < 8; j++) {
int foutb = fout[i * 8 + j];
sum = 0;
for (j = 0; j < 8; j++) {
int foutb = fout[i * 8 + j];
foutb <<= j;
//System.out.print(foutb);
sum += foutb;
//System.out.println(sum);
}
//System.out.print(foutb);
sum += foutb;
//System.out.println(sum);
}
strout += (char)sum;
sum=0;
//System.out.println(sum);
//document.write(String.fromCharCode(sum));
}
return strout;
}
public String Des_deCrypt(String str_input) { //解密
int n, i, j, cnt;
int sum;
String strout = /"/";
int[] b_array_input = new int[64];
int[] b_array_lr = new int[64];
int[] b_array_l = new int[32];
int[] b_array_r = new int[32];
int[] b_array_fn = new int[32];
int n, i, j, cnt;
int sum;
String strout = /"/";
int[] b_array_input = new int[64];
int[] b_array_lr = new int[64];
int[] b_array_l = new int[32];
int[] b_array_r = new int[32];
int[] b_array_fn = new int[32];
for (n = i = 0; i < 8; i++) {
for (j = 0; j < 8; j++) {
int bt1 = (int) str_input.charAt(i);
bt1 >>= j;
bt1 &= 0x01;
b_array_input[n++] = bt1;
for (j = 0; j < 8; j++) {
int bt1 = (int) str_input.charAt(i);
bt1 >>= j;
bt1 &= 0x01;
b_array_input[n++] = bt1;
//获得二进制
}
}
for (i = 0; i < 64; i++) {
b_array_lr[i] = b_array_input[g_ip[i] - 1];
if (i < 32) {
b_array_l[i] = b_array_lr[i];
} else {
b_array_r[i - 32] = b_array_lr[i]; //分离l,r
}
}
}
}
for (i = 0; i < 64; i++) {
b_array_lr[i] = b_array_input[g_ip[i] - 1];
if (i < 32) {
b_array_l[i] = b_array_lr[i];
} else {
b_array_r[i - 32] = b_array_lr[i]; //分离l,r
}
}
for (cnt = 15; cnt >= 0; cnt--) {
b_array_fn = frk(b_array_r, cnt);
for (i = 0; i < 32; i++) {
int bj = b_array_r[i];
int aryl = b_array_l[i];
int aryfn = b_array_fn[i];
aryl ^= aryfn;
b_array_r[i] = aryl;
b_array_l[i] = bj;
b_array_fn = frk(b_array_r, cnt);
for (i = 0; i < 32; i++) {
int bj = b_array_r[i];
int aryl = b_array_l[i];
int aryfn = b_array_fn[i];
aryl ^= aryfn;
b_array_r[i] = aryl;
b_array_l[i] = bj;
}
}
}
for (i = 0; i < 32; i++) {
b_array_lr[i] = b_array_r[i];
b_array_lr[i + 32] = b_array_l[i];
}
b_array_lr[i] = b_array_r[i];
b_array_lr[i + 32] = b_array_l[i];
}
int[] fout = new int[64];
for (i = 0; i < 64; i++) {
fout[i] = b_array_lr[g_invip[i] - 1];
}
for (i = 0; i < 64; i++) {
fout[i] = b_array_lr[g_invip[i] - 1];
}
for (i = 0; i < 8; i++) {
sum = 0;
for (j = 0; j < 8; j++) {
sum += (fout[i * 8 + j] << j);
}
//System.out.println();
strout += (char)sum;
}
return strout;
}
sum = 0;
for (j = 0; j < 8; j++) {
sum += (fout[i * 8 + j] << j);
}
//System.out.println();
strout += (char)sum;
}
return strout;
}
}
- 实现客户端加密,后台解密
- JS前台加密,java后台解密实现
- JS前台加密,java后台解密实现
- JS加密后台解密
- JS实现BASE64加密解密-后台加密前台解密案例分析
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- rsa实现js前台加密java后台解密
- 【转】JS前台加密,java后台解密实现
- Android客户端解密与C#服务端加密实现方法
- RSA前台加密后台解密
- ios客户端RSA公钥加密 .net后台私钥解密解决方案(基于Openssl)
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
- 【加密解密】-AES加密解密实现
- 【加密解密】-AES加密解密实现
- TripleDES实现加密解密///
- PHP 框架,第 1 部分: 开始使用三种常用框架(Zend、symfony、CakePHP)
- 理解JAVA多态
- 零树小波图像压缩专题(1)
- SourceInsight的实用技巧
- c#生成pdf的源代码
- 实现客户端加密,后台解密
- 最简单的ocx
- INSERT FIRST和INSERT ALL的区别
- rhel5下载及MD5校验
- 怎么看到自己的积分,以及如何获取积分?
- 输入框输入字符限制
- oracle数据仓库中三种优化
- 关于文件操作的API函数
- DELPHI制作复杂报表实例,特别推荐!