#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);
#endifint 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;
}

解决方案 »

  1.   

    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");
        }
    };