0 0

c++代码翻译成java代码,请指教!30

这是一段c++代码:
#include "stdafx.h"
#include "Minica.h"
#include "Des.h"
#include "Window.h"
#include "GfL.h"
#include "md5.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CString strMd5Key="xxxzxxxzzzx";
/******************************************************************************/
//	名称:Decrypt
//	功能:解密
//  参数:KeyStr为0结尾的密钥串,长度<=16,可为任意字符
//	返回:解密成功返回true,否则返回false
//  备注:当密钥长度>8时,系统自动使用3次DES解密
/******************************************************************************/
bool CDes::Decrypt(const char *OutFile,const char *InFile,const char *KeyStr)
{
	try{
		CMd5  md5;
		int nKeykey=5*6;
		nKeykey+=256;
		CString m_password;
		m_password.Format("%d%d",nKeykey,nKeykey);
		md5.TargetStr(strMd5Key +m_password);
		CString strsawkey =  md5.Digest;		 
		CString m_filepath=InFile;
		CString m_destFile=OutFile;
		LARGE_INTEGER llfilesize;
		HANDLE hfile = CreateFile(m_filepath,GENERIC_READ,FILE_SHARE_READ,
			NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
		if(INVALID_HANDLE_VALUE == hfile  ||   !hfile)
			return false;
		llfilesize.LowPart = GetFileSize(hfile,(LPDWORD)&llfilesize.HighPart);
		CloseHandle(hfile);
		 LONGLONG filesize = llfilesize.QuadPart;     
		 CString strflag;
		   FILE * pfSrc = fopen(m_filepath,"rb");
		   if(NULL==pfSrc)
			   return false;
		   bool bNewJiami=false;
		   if(filesize>500)
		   {
			   char pre[500]={0};
			   int readed=	 fread(pre,1,500,pfSrc);
			   if(readed!=500)
			   {
				   fclose(pfSrc);
				   return false;
			   }
			   if(0==memcmp(pre,flag,30))
			   {
				   char szRadom[50]={0};
				   memcpy(szRadom,pre+50,50);
				   char szName[200]={0};
				   memcpy(szName,pre+100,200);

				   CString strRadom=szRadom;
				   CString strName=szName;
				   strflag=strRadom;
				   bNewJiami=false;

				   filesize=filesize-500;
			   }
			   else
			   {
					strflag.Format("%ld",filesize);
			   fseek(pfSrc,0,SEEK_SET);
			   }
			  

		   }
		 CString strNewKey=strsawkey +strflag;
		 md5.TargetStr(strNewKey);
		  strsawkey =  md5.Digest;
		keyLock  teaa= convert_Str_To_Key( const_cast<char *>( (const char *)strsawkey )  );    
			char buffsrc[4096*64];
			char buffdst[4096*64];
		char temp[4096*64];  
		 FILE * pfdst = fopen(m_destFile,"wb+");
		  if(pfdst==pfSrc)
			 return false;
		 int  readed =0;
		 LONGLONG  allreaded=0;
		 int newpercent=0;
		 int oldpercent =0; 
		while (readed = fread(temp,1,4096*16,pfSrc)) 
		{
					if(99==m_Abort)
					break;
			 allreaded+=readed;    
			 int converted  = First(temp,readed,teaa);
			 if (readed != converted)
			 {
				 AfxMessageBox("解密出错");
				 fclose(pfdst);
				 fclose(pfSrc);
				 return false;
			 }
			 fwrite(temp,1,readed,pfdst);
			 
			 newpercent = allreaded*100/filesize;
			 if (newpercent != oldpercent)
			 {
				 oldpercent=newpercent;
			 }      
		} 
		fclose(pfdst);
		fclose(pfSrc);
		return true;
	}
	catch(...)
	{
		AfxMessageBox("加载后");
	return false;
	}
	return true;
}
struct keyLock
{
	keyLock(   )
	{
		key=NULL;
        keycount=0;
	}
	keyLock(int count)
	{
	    key=NULL;
        keycount=0;
		key = new char[count];
	    if (key)
	    {
			memset(key,0,count);
	    }
	}
	~keyLock()
	{
		if (key)
		{
			delete key;
		}
	}
	keyLock(const keyLock& src)
	{
	   key =NULL;
		
		key = new char[src.keycount];
		if (key)
		{
			//memset(key,0,src.keycount);
			memcpy(key,src.key,src.keycount);
			keycount = src.keycount;
	    }
	}
	 keyLock operator=(keyLock& src) 
	 {
        if (key)
        {
			delete key;
			keycount=0;
        }
		key = new char[src.keycount];
		if (key)
		{
			//memset(key,0,src.keycount);
			memcpy(key,src.key,src.keycount);
			keycount = src.keycount;
		}
		return *this;
	 }

char *key ;
int keycount ;
};
keyLock convert_Str_To_Key(char* str)
{
      int nstrcount=0;
      char * temp =str;
	  while ('\0' != *temp )
	  {
	    nstrcount++;
		temp++;
	  }
	  if (!nstrcount)
	  {
		  return NULL;
	  }
	  keyLock key(nstrcount*2 );
       
	  char * cur= key.key;
	  while ('\0' != *str )
	  {

		  *cur = (*str)%8 +1;
		  cur++;
        
		    *cur = (*str)/8 +1; 
		  		  cur++;
		  		   
		     /*       *cur = ((*str)+8121)%8 +1; 
		  		  cur++;
		  		  *cur = ((*str)+2010)/8%8 +1; 
		  		  cur++;*/
		  

		  str++;
		  key.keycount+=2;
	  }
	  return  key;
}

int First(char *src,int count,keyLock key)
{
	int i =0;
   for (  i =0;i<count;)
   {
	   for (int j=0;(j<key.keycount && i<count);j++,i++)
	   {
		   src[i]=~src[i];
		   char keybit = ((1<<(key.key[j]-1)) & src[i]  );
		   src[i] = ( (~keybit) & (1<<(key.key[j]-1) ) )     |   ( ( ~(1<<(key.key[j]-1))) & src[i] );
           if (ispower && ((j+3)<key.keycount))
           {
			   j++;
			   keybit = ((1<<(key.key[j]-1)) & src[i]  );
			   
		       src[i] = ( (~keybit) & (1<<(key.key[j]-1) ) )     |   ( ( ~(1<<(key.key[j]-1))) & src[i] );
                 
			   j++;
			   keybit = ((1<<(key.key[j]-1)) & src[i]  );
			   
			   src[i] = ( (~keybit) & (1<<(key.key[j]-1) ) )     |   ( ( ~(1<<(key.key[j]-1))) & src[i] );


           }
	   }
	   if (ispower)
	   {
      	CMd5  md5;
		key.key[20]='\0';
			CString stroldkey =key.key;
		md5.TargetStr(strMd5Key + stroldkey);
        CString strsawkey =  md5.Digest;
		key = convert_Str_To_Key( const_cast<char *>( (const char *)strsawkey )  );
	   }
	   
   }
   return i;
   
}

翻译好能加我扣扣(465053705)么,谢谢了
2014年10月14日 00:39
目前还没有答案

相关推荐

    C++代码转java工具

    在某些情况下,开发者可能需要将已有的C++代码转换为Java代码,以便在Java平台上运行或利用Java的生态系统。 标题“C++代码转Java工具”暗示了一个软件或服务的存在,它的功能是自动化C++源代码到Java源代码的转换...

    Java转C++代码工具 J2C

    在使用J2C工具时,用户需要确保输入的Java代码清晰、规范,以减少转换错误。转换后,开发者应仔细审查C++代码,修复潜在问题,并根据需要进行优化。同时,理解Java和C++两种语言的异同是非常重要的,这样可以更好地...

    C++转换JAVA工具

    "C++转换JAVA工具" 提供了一种解决方案,使得开发者可以从C++代码无缝过渡到Java代码,或者将Java代码转换为C++,以适应不同的开发需求和环境。这种工具的主要目标是提高开发效率,降低维护成本,以及实现平台间的...

    C++头文件代码翻译为C#的工具

    标题提到的“C++头文件代码翻译为C#的工具”就是为了帮助开发者将C++编写的DLL文件中的函数接口转换成C#可以调用的形式。 C++头文件(.h文件)通常包含了函数声明、结构体、枚举等类型定义,这些都是构建C++接口的...

    C++转Java工具

    在JNI开发中,通常会编写Java代码来定义本地方法,然后使用JNI头文件生成对应的C/C++代码,编译后与Java字节码一起运行。 C++转Java工具的工作原理可能包括语法解析、类型映射和代码重构等步骤。它会读取C++源代码...

    c++平方数源代码!c++平方数源代码!

    c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!c++平方数源代码!

    JAVA 转C++工具

    JAVA代码转C++代码的工具,可以按照目录进行转换,虽然不是全部都转换的很好,但还是不错的

    CPlus_to_Java_Converter;C++转java工具

    本文将围绕“CPlus_to_Java_Converter”这一工具,探讨如何将C++代码转换为Java代码,并分析这一过程中涉及的关键技术和挑战。 首先,我们要明确C++到Java的转换并非简单的语法替换,因为两者的语言特性差异显著。...

    在Qt平台C++和Java代码的交互

    本文将深入探讨在Qt平台上如何实现C++与Java代码的交互。 首先,理解C++与Java交互的基本原理至关重要。这种交互通常通过JNI(Java Native Interface)来实现,它允许Java代码调用本地(如C++)代码,反之亦然。JNI...

    C++/Java代码分析器

    《C++/Java代码分析器详解》 在编程领域,理解和分析代码是提升技能的关键步骤。本文将深入探讨“C++/Java代码分析器”,这是一个专为C++和Java编程爱好者设计的工具,旨在帮助他们更好地理解、分析代码,从而提升...

    任意代码格式化(c++,c,java,c#,html,javascript,php,asp)

    任意代码格式化工具(c++代码格式化工具,c代码格式化工具,java代码格式化工具,c#代码格式化工具工具,htm代码格式化l工具,javascript代码格式化工具,php代码格式化工具,asp代码格式化工具,c++代码整理工具,c代码整理...

    JNI调用C++代码和C++层回调java层 demo

    JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在许多场景下都很有用,比如利用现有的C/C++库、优化性能敏感的代码段或者实现操作系统特定的功能。本教程将...

    在线翻软件译源代码(多国语言),C++

    标题中的“在线翻软件译源代码(多国语言),C++”表明这是一个使用C++编程语言编写的在线翻译软件的源代码。这类源代码通常包含了处理文本翻译逻辑、多国语言支持以及可能的用户界面交互等功能。源代码是程序的基础...

    c++和java互调代码示例

    printf("Hello from C++!\n"); } ``` 5. **编译与运行**: - 编译C++代码为动态链接库,确保链接到libjvm.so或jvm.dll。 - 运行Java程序,它会加载C++库并调用相应的本地方法。 通过上述步骤,C++和Java可以...

    Android 调用C++代码和C++代码调用源码.zip

    除了Java调用C++,C++也可以反向调用Java代码。这需要通过`env-&gt;FindClass()`, `env-&gt;GetMethodID()`等JNI API获取Java类和方法的ID,然后使用`env-&gt;Call*Method()`进行调用。这种方法适用于处理回调或者异步操作。 ...

    java jni c++代码

    7. **运行Java代码**: 在Java代码中通过`System.loadLibrary`加载C++编译的库,然后就可以调用本地方法了。 在提供的压缩包文件`TestJndi`中,可能包含了演示如何使用JNI与C++进行交互的示例代码。`TestJndi`可能是...

    java 调用C++库测试代码

    JNI允许Java代码与其他编程语言编写的代码进行交互,包括C++。在本示例中,我们将深入探讨如何使用JNI来实现这个功能。 首先,我们需要了解JNI的基本概念。JNI是一个规范,它定义了Java虚拟机(JVM)如何与本地代码...

    安卓Android源码——代码调用C++代码和C++代码调用代码.zip

    2. **C++代码调用Java代码** - 获取JNIEnv指针:在C++代码中,通过`JNIEnv*`指针可以访问Java虚拟机和Java对象。 - 查找Java类和方法:使用`FindClass`找到Java类,`GetMethodID`获取方法ID,`NewObject`创建对象...

    Android应用源码之代码调用C++代码和C++代码调用代码.rar

    本压缩包文件"Android应用源码之代码调用C++代码和C++代码调用Java代码"提供了关于如何在Android应用中集成C++代码的示例,适用于那些想要深入了解跨语言编程的开发者。 1. **JNI(Java Native Interface)** JNI...

Global site tag (gtag.js) - Google Analytics