资源简介
在基于vc.net基础上,采用经典的rc5 方法对文件加解密
欢迎批评
此算法已经调试通过
代码片段和文件信息
/* RC5REF.C -- Reference implementation of RC5-32/12/16 in C. */
/* Copyright (C) 1995 RSA Data Security Inc. */
#include
#include
typedef unsigned long int WORD; /* Should be 32-bit = 4 bytes */
#define w 32 /* word size in bits */
#define r 12 /* number of rounds */
#define b 16 /* number of bytes in key */
#define c 4 /* number words in key = ceil(8*b/w)*/
#define t 26 /* size of table S = 2*(r+1) words */
WORD S[t]; /* expanded key table */
WORD P = 0xb7e15163 Q = 0x9e3779b9; /* magic constants */
/* Rotation operators. x must be unsigned to get logical right shift*/
#define ROTL(xy) (((x)<<(y&(w-1))) | ((x)>>(w-(y&(w-1)))))
#define ROTR(xy) (((x)>>(y&(w-1))) | ((x)<<(w-(y&(w-1)))))
void RC5_ENCRYPT(WORD *pt WORD *ct) /* 2 WORD input pt/output ct */
{ WORD i A=pt[0]+S[0] B=pt[1]+S[1];
for (i=1; i<=r; i++)
{ A = ROTL(A^BB)+S[2*i];
B = ROTL(B^AA)+S[2*i+1];
}
ct[0] = A; ct[1] = B;
}
void RC5_DECRYPT(WORD *ct WORD *pt) /* 2 WORD input ct/output pt */
{ WORD i B=ct[1] A=ct[0];
for (i=r; i>0; i--)
{ B = ROTR(B-S[2*i+1]A)^A;
A = ROTR(A-S[2*i]B)^B;
}
pt[1] = B-S[1]; pt[0] = A-S[0];
}
void RC5_SETUP(unsigned char *K) /* secret input key K[0...b-1] */
{ WORD i j k u=w/8 A B L[c];
/* Initialize L then S then mix key into S */
for (i=b-1L[c-1]=0; i!=-1; i--) L[i/u] = (L[i/u]<<8)+K[i];
for (S[0]=Pi=1; i for (A=B=i=j=k=0; k<3*t; k++i=(i+1)%tj=(j+1)%c) /* 3*t > 3*c */
{ A = S[i] = ROTL(S[i]+(A+B)3);
B = L[j] = ROTL(L[j]+(A+B)(A+B));
}
}
void main()
{ WORD i j pt1[2] pt2[2] ct[2] = {00};
unsigned char key[b];
time_t t0 t1;
if (sizeof(WORD)!=4)
printf(“RC5 error: WORD has %d bytes.\n“sizeof(WORD));
printf(“RC5-32/12/16 examples:\n“);
for (i=1;i<6;i++)
{ /* Initialize pt1 and key pseudorandomly based on previous ct */
pt1[0]=ct[0]; pt1[1]=ct[1];
for (j=0;j /* Setup encrypt and decrypt */
RC5_SETUP(key);
RC5_ENCRYPT(pt1ct);
RC5_DECRYPT(ctpt2);
/* Print out results checking for decryption failure */
printf(“\n%d. key = “i);
for (j=0; j printf(“\n plaintext %.8lX %.8lX ---> ciphertext %.8lX %.8lX \n“
pt1[0] pt1[1] ct[0] ct[1]);
if (pt1[0]!=pt2[0] || pt1[1]!=pt2[1])
printf(“Decryption Error!“);
}
time (&t0);
for (i=1;i<100000;i++)
RC5_ENCRYPT(ctct);
time (&t1);
printf (“\n Time_t for 100000 blocks: %ld \n“ t1-t0);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5963 1999-09-02 12:49 rc5-info-from-rsa.txt
文件 31896 1999-09-02 12:50 rc5.ps.gz
文件 7089 1999-09-02 12:50 rc5.tex.gz
文件 2862 1999-09-02 12:50 rc5ref.c
文件 697 1999-09-02 12:50 rc5ref.out
相关资源
- 基于DES加解密的Socket聊天程序代码
- as3加解密工具类Crypto
- AES加解密算法以及五种工作模式的实
- Dcpcrypt2delphi加解密控件,包含很多加
- RSA公私钥生成、加解密,支持1024位计
- 基于des前后端加密解密
- GCM-AES-128加解密及密钥打包aes_wrap
- RSA加解密在Delphi代码中的实现Demo
- 配置项加解密.rar
- AES加解密算法的实现
- 国密 SM4 ECB 加解密字符串
- 国密 SM2 SM3 签名 验签 加解密 公私钥
- Delphi XE2+标准AES加解密算法AES/EBCCBC/
- Rsa加解密Demo
- MFC实现的AES加解密软件(内附源代码
- sm4加解密工具new
- 使用MFC加解密文件
- AES加解密
- AES算法加解密的源代码,真正可支持
- 中兴贝尔光猫cfg文件解密加密工具
- 非对称加解密——RSA加密、解密以及
- RSA算法Demo
- e语言-国密SM4加解密源码
-
Qt以ba
se64加密作为基础实现3种加解 - 文件加密程序设计
- 300种加解密算法
- aes加解密算法
- DES加解密算法代码及实验报告
评论
共有 条评论