中易网

用java或者C/C++实现RC5算法

答案:3  悬赏:0  
解决时间 2021-12-31 16:45
请大家帮忙用java或者C/C++语言实现RC5算法,该程序能够对任意文件(包括常见的文本,图片等)的解密和解密。
请将程序发到我邮箱:[email protected]
最佳答案
1、补充了两个个宏定义:
#define SHL1(x,s,w) ((RC5_WORd)((x)<<((w)-((s)&ROT_MASK))))
#define ROTR(x,s,w) ((RC5_WORd)(SHR1((x),(s))|SHL1((x),(s),(w))))
2、解密函数定义如下:
void RC5_Block_Decrypt (RC5_WORD *S,int R,char *in,char *out)
{
int i;
RC5_WORD A,B;
A = in[0] & 0xFF;
A += (in[1] & 0xFF) << 8;
A += (in[2] & 0xFF) << 16;
A += (in[3] & 0xFF) << 24;
B = in[4] & 0xFF;
B += (in[5] & 0xFF) << 8;
B += (in[6] & 0xFF) << 16;
B += (in[7] & 0xFF) << 24;
for(i=R;i>=1;i--){
B=ROTR((B-S[2*i+1]),A,W);
B=B^A;
A=ROTR((A-S[2*i]),B,W);
A=A^B;
}
B=B-S[1];
A=A-S[0];
out[0] = (A >> 0) & 0xFF;
out[1] = (A >> 8) & 0xFF;
out[2] = (A >> 16) & 0xFF;
out[3] = (A >> 24) & 0xFF;
out[4] = (B >> 0) & 0xFF;
out[5] = (B >> 8) & 0xFF;
out[6] = (B >> 16) & 0xFF;
out[7] = (B >> 24) & 0xFF;
return;
}
int RC5_CBC_Decrypt_Init (pAlg, pKey)
rc5CBCAlg *pAlg;
rc5UserKey *pKey;
{
if ((pAlg == ((rc5CBCAlg *) 0)) ||
(pKey == ((rc5UserKey *) 0)))
return (0);
RC5_Key_Expand (pKey->keyLength, pKey->keyBytes,pAlg->R, pAlg->S);
return (RC5_CBC_SetIV(pAlg, pAlg->I));
}
int RC5_CBC_Decrypt_Update(rc5CBCAlg *pAlg,int N,char *C,int *plainLen,char *P)
{
int plainIndex,cipherIndex,j;
plainIndex=cipherIndex=0;
for(j=0;j<BB;j++)
{
P[plainIndex]=pAlg->chainBlock[j];
plainIndex++;
}
plainIndex=0;
while(cipherIndex<N)
{
if(pAlg->inputBlockIndex<BB)
{
pAlg->inputBlock[pAlg->inputBlockIndex]=C[cipherIndex];
pAlg->inputBlockIndex++;
cipherIndex++;
}
if(pAlg->inputBlockIndex==BB)
{
pAlg->inputBlockIndex=0;
RC5_Block_Decrypt (pAlg->S,pAlg->R,pAlg->inputBlock,pAlg->chainBlock);
for(j=0;j<BB;j++)
{
if(plainIndex<BB)
P[plainIndex]^=pAlg->chainBlock[j];
else
P[plainIndex]=C[cipherIndex-16+j]^pAlg->chainBlock[j];
plainIndex++;
}
}
}
*plainLen=plainIndex;
return (1);
}
全部回答
数据结构是由若干特性相同的数据元素构成的集合,且在集合上存在一种或多种关系。由关系不同可将数据结构分为四类:线性结构、树形结构、图状结构和集合结构。数据的存储结构是数据逻辑结构在计算机中的映象,由关系的两种映象方法可得到两类存储结构:一类是顺序存储结构,它以数据元素相对的存储位置表示关系,则存储结构中只包含数据元素本身的信息;另一类是链式存储结构,它以附加的指针信息(后继元素的存储地址)表示关系。 数据结构的操作是和数据结构本身密不可分的,两者作为一个整体可用抽象数据类型进行描述。抽象数据类型是一个数学模型以及定义在该模型上的一组操作,因此它和高级程序设计语言中的数据类型具有相同含义,而抽象数据类型的范畴更广,它不局限于现有程序设计语言中已经实现的数据类型(它们通常被称为固有数据类型),但抽象数据类型需要借用固有数据类型表示并实现。抽象数据类型的三大要素为数据对象、数据关系和基本操作,同时数据抽象和数据封装是抽象数据类型的两个重要特性。 算法是进行程序设计的另一不可缺少的要素。算法是对问题求解的一种描述,是为解决一个或一类问题给出的一种确定规则的描述。一个完整的算法应该具有下列五个要素:有穷性、确定性、可行性、有输入和有输出。一个正确的算法应对苛刻且带有刁难性的输入数据也能得出正确的结果,并且对不正确的输入也能作出正确的反映。 算法的时间复杂度是比较不同算法效率的一种准则,算法时间复杂度的估算基于算法中基本操作的重复执行次数,或处于最深层循环内的语句的频度。算法空间复杂度可作为算法所需存储量的一种量度,它主要取决于算法的输入量和辅助变量所占空间,若算法的输入仅取决于问题本身而和算法无关,则算法空间复杂度的估算只需考察算法中所用辅助变量所占空间,若算法的空间复杂度为常量级,则称该算法为原地工作的算法。 由上可知,算法和数据结构通用于各种语言。 其实你可以多找几本算法和数据结构的书来学习,就会发现所有的数据结构和算法都可以通过不同的编程语言来实现。

md5是不可逆的加密算法,java实现如下

public class md5 {

static final int s11 = 7; static final int s12 = 12; static final int s13 = 17; static final int s14 = 22; static final int s21 = 5; static final int s22 = 9; static final int s23 = 14; static final int s24 = 20; static final int s31 = 4; static final int s32 = 11; static final int s33 = 16; static final int s34 = 23; static final int s41 = 6; static final int s42 = 10; static final int s43 = 15; static final int s44 = 21; static final byte[] padding = {-128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; private long[] state = new long[4]; // state (abcd) private long[] count = new long[2]; // number of bits, modulo 2^64 (lsb first) private byte[] buffer = new byte[64]; // input buffer public string digesthexstr; private byte[] digest = new byte[16];

我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
履贵的意思是什么?履贵的释义是什么啊?
犀牛软件那个插件是适合做首饰设计的?
公路车脚踏杆怎么拿下来.以前的滑丝了
出捐的意思是什么啊?请解释下!
低配车。福特野马与宝马Z4买那个比较好???
节约的意思是什么?节约的释义是什么啊?
16寸的海报大概多大?
童之乐托管地址在什么地方,想过去办事
john is a new student from Hong Kong Nobod
1981年农历三月二十七女属鸡的人什么命
霞月的意思是什么啊?请解释下!
知過的意思是什么?知過的释义是什么啊?
运动会方阵用什么道具
2003教师资格证如何网上查讯
能维持人体恒定体温和正常ph值的是
推荐资讯
步进电机 90120 是什么意思
怎样根据凭证来做丁字帐,怎样看丁字帐来填科
區區惓惓的意思是什么?區區惓惓的释义是什么
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?