高分求助如何将这段 c 代码转化为java (涉及到DES加密)

gallenvaw 2006-07-24 04:56:06
#include "stdio.h"
#ifndef _TP_ENCRYPT_XML_DLL_H
#define _TP_ENCRYPT_XML_DLL_H
#define myConstKey "abcdefgh"
extern int encryptXML(char *OutFile,char *InFile);
#endif

int KEYbit[64];
int temOut[64],temIn[64];
char Outdata[4*1024], Indata[4*1024];
long datalen;

int ReadDataFromFile(char *filePath)
{
FILE *pF;
datalen=0;
if( (pF=fopen(filePath,"r"))==NULL)
return 0;
while(!feof(pF))
{
fscanf(pF,"%c",&Indata[datalen]);
datalen++;
}
fclose(pF);
return 1;
}

int WriteDataTofile(char *filePath)
{
FILE *pF;
int i=0;
if( (pF=fopen(filePath,"w"))==NULL )
return 0;
for(;i<datalen-1;i++)
fprintf(pF,"%c",Outdata[i]);
fclose(pF);
}

void ByteToBit(int *Out, char *In, int bits)
{
for(int i=0; i<bits; ++i)
Out[i] = (In[i>>3]>>(i&7)) & 1;
}
void BitToByte(char *Out, int *In, int bits)
{
for(int i=0; i<bits; ++i)
Out[i>>3] |= In[i]<<(i&7);
}

void encryptXML_real(int bitLen)
{
int i=0;
for(;i<bitLen;i++)
if(temIn[i]==KEYbit[i])
temOut[i]=0;
else
temOut[i]=1;
}

void SUB_encryptXML(char *SubOut,char *SubIn)
{
int len;
memset(temIn,0,64);
memset(temOut,0,64);
len=8;
ByteToBit(temIn,SubIn,len*8);
encryptXML_real(len*8);
BitToByte(SubOut,temOut,len*8);
}

//无论加解密都用这一个函数
int encryptXML(char *OutFile,char *InFile)
{
long i,j,temDataen;
char *pIndata,*pOutData;
pIndata=Indata;
pOutData=Outdata;
memset(Indata,0,4*1024);
memset(Outdata,0,4*1024);
memset(KEYbit,0,64);
if( !ReadDataFromFile(InFile) )
return 0;
ByteToBit(KEYbit,myConstKey,64);
temDataen=datalen;
for(i=0,j=temDataen>>3;i<j+1; i++,pOutData+=8,pIndata+=8)
{
SUB_encryptXML(pOutData,pIndata);
}

WriteDataTofile(OutFile);
return 1;
}
...全文
182 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
du51 2006-07-27
  • 打赏
  • 举报
回复
import java.io.*;
class FileClass{
private byte[]Indata=new byte[4*1024];
private byte[]Outdata=new byte[4*1024];
private int[]KEYbit=new int[64];
private int[]temOut=new int[64];
private int[]temIn=new int[64];
private int datalen=0;
private byte[]myConstKey={'a','b','c','d','e','f','g','h'};

boolean ReadDataFromFile(String path){
File file=new File(path);
if(file.exists()&&file.isFile()){
try{
InputStream input=new FileInputStream(file);
datalen=input.available();
input.read(Indata,0,datalen);
input.close();
return true;
}
catch(IOException e){ return false;}
}
else return false;
}

boolean WriteDataToFile(String path){
File file=new File(path);
try{
FileOutputStream output=new FileOutputStream(file);
output.write(Outdata,0,datalen);
output.close();
return true;
}
catch(IOException e){ return false;}
}

void ByteToBit(int[]Out,byte[]In,int base,int bits){
for(int i=0;i<bits;++i)
Out[i]=(In[(i>>3)+base]>>(i&7))&1;//此处原来少了括号
}

void BitToByte(byte[]Out,int[]In,int base,int bits){
for(int i=0;i<bits;++i)
Out[(i>>3)+base]|=In[i]<<(i&7);//此处原来少了括号
}

void encryptXML_real(int bitLen){
int i=0;
for(;i<bitLen;i++)
if(temIn[i]==KEYbit[i])
temOut[i]=0;
else
temOut[i]=1;
}

void SUB_encryptXML(byte[]SubOut,byte[]SubIn,int base){
int len;
for(int i=0;i<64;++i){
temOut[i]=temIn[i]=0;
}
len=8;
ByteToBit(temIn,SubIn,base,len*8);
encryptXML_real(len*8);
BitToByte(SubOut,temOut,base,len*8);
}

boolean encryptXML(String OutFile,String InFile){
int i,j;
int base=0;
for(i=0;i<4*1024;++i){
Indata[i]=0;
Outdata[i]=0;
}
for(i=0;i<64;++i){
KEYbit[i]=0;
}
if(!ReadDataFromFile(InFile))
return false;
ByteToBit(KEYbit,myConstKey,0,64);
for(i=0,j=datalen>>3;i<=j;i++,base+=8){
SUB_encryptXML(Outdata,Indata,base);
}
WriteDataToFile(OutFile);
return true;
}
};
public class encrypt{
public static void main(String[]args){
FileClass fc=new FileClass();
fc.encryptXML("D:\\des1.txt","D:\\des.txt");
}
};
jigangwang 2006-07-24
  • 打赏
  • 举报
回复
关注,帮顶...
wubaowang 2006-07-24
  • 打赏
  • 举报
回复
ding...
gallenvaw 2006-07-24
  • 打赏
  • 举报
回复
偶对C 不熟。。。。有没有大虾。。。帮小弟一下。。。
issgates 2006-07-24
  • 打赏
  • 举报
回复
友情帮顶。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧