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

全部回答3
默认 最新
  • 数据结构是由若干特性相同的数据元素构成的集合,且在集合上存在一种或多种关系。由关系不同可将数据结构分为四类:线性结构、树形结构、图状结构和集合结构。数据的存储结构是数据逻辑结构在计算机中的映象,由关系的两种映象方法可得到两类存储结构:一类是顺序存储结构,它以数据元素相对的存储位置表示关系,则存储结构中只包含数据元素本身的信息;另一类是链式存储结构,它以附加的指针信息(后继元素的存储地址)表示关系。 数据结构的操作是和数据结构本身密不可分的,两者作为一个整体可用抽象数据类型进行描述。抽象数据类型是一个数学模型以及定义在该模型上的一组操作,因此它和高级程序设计语言中的数据类型具有相同含义,而抽象数据类型的范畴更广,它不局限于现有程序设计语言中已经实现的数据类型(它们通常被称为固有数据类型),但抽象数据类型需要借用固有数据类型表示并实现。抽象数据类型的三大要素为数据对象、数据关系和基本操作,同时数据抽象和数据封装是抽象数据类型的两个重要特性。 算法是进行程序设计的另一不可缺少的要素。算法是对问题求解的一种描述,是为解决一个或一类问题给出的一种确定规则的描述。一个完整的算法应该具有下列五个要素:有穷性、确定性、可行性、有输入和有输出。一个正确的算法应对苛刻且带有刁难性的输入数据也能得出正确的结果,并且对不正确的输入也能作出正确的反映。 算法的时间复杂度是比较不同算法效率的一种准则,算法时间复杂度的估算基于算法中基本操作的重复执行次数,或处于最深层循环内的语句的频度。算法空间复杂度可作为算法所需存储量的一种量度,它主要取决于算法的输入量和辅助变量所占空间,若算法的输入仅取决于问题本身而和算法无关,则算法空间复杂度的估算只需考察算法中所用辅助变量所占空间,若算法的空间复杂度为常量级,则称该算法为原地工作的算法。 由上可知,算法和数据结构通用于各种语言。 其实你可以多找几本算法和数据结构的书来学习,就会发现所有的数据结构和算法都可以通过不同的编程语言来实现。
    0 点赞
  • md5是不可逆的加密算法,java实现如下 /************************************************md5 算法的java beanlast modified:10,mar,2001 md5 类实现了rsa data security, inc.在提交给ietf的rfc1321中的md5 message-digest 算法。 *************************************************/public class md5 { /* 下面这些s11-s44实际上是一个4*4的矩阵,在原始的c实现中是用#define 实现的, 这里把它们实现成为static final是表示了只读,切能在同一个进程空间内的多个 instance间共享*/ 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}; /* 下面的三个成员是md5计算过程中用到的3个核心数据,在原始的c实现中 被定义到md5_ctx结构中 */ 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 /* digesthexstr是md5的唯一一个公共成员,是最新一次计算结果的 16进制ascii表示. */ public string digesthexstr; /* digest,是最新一次计算结果的2进制内部表示,表示128bit的md5值. */ private byte[] digest = new byte[16]; /* getmd5ofstr是类md5最主要的公共方法,入口参数是你想要进行md5变换的字符串 返回的是变换完的结果,这个结果是从公共成员digesthexstr取得的. */
    0 点赞
  • 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; }/*End of RC5_Block_Decrypt */ 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); }/*End of RC5_CBC_Decrypt_Update*/
    0 点赞

没有更多内容了

返回顶部
产品求购 求购