资源简介
利用C语言编写的3DES加密算法,能够对任意长度的字符数组进行加解密。通过编写相应的JNI接口文件能够很容易移植到Android平台,从而解决不同平台DES加解密结果不一致的问题。
代码片段和文件信息
#include “memory.h“
#include “3des.h“
#include “stdio.h“
#include
/*********************************************************/
static void F_func(bool In[32] const bool Ki[48]);// f 函数
static void S_func(bool Out[32] const bool In[48]);// S 盒代替
static void Transform(bool *Out bool *In const char *Table int len);// 变换
static void Xor(bool *InA const bool *InB int len);// 异或
static void RotateL(bool *In int len int loop);// 循环左移
static void ByteToBit(bool *Out const char *In int bits);// 字节组转换成位组
static void BitToByte(char *Out const bool *In int bits);// 位组转换成字节组
static bool SubKey[16][48];// 16圈子密钥
/*********************************************************/
/************************加密*********************************/
int Encrypt(char *Msg char *Key char *Cipherint length) //如果消息长度不是8的倍数,末位补0凑成8的倍数。
{
if(length <=0)
{
return -1;
}
char keyarray1[8];
char keyarray2[8];
char keyarray3[8];
memcpy(&keyarray1 &Key[0] 8);
memcpy(&keyarray2 &Key[8] 8);
memcpy(&keyarray3 &Key[16] 8);
if (length%8==0)
{
int dst = length/8;
char out[8];
char in[8];
for (int j=0;j {
memcpy(&in[0] &Msg[8*j] 8);
encrypt(in keyarray1 out);///////////////////
decrypt(out keyarray2 in);//////////////////
encrypt(in keyarray3 out);//////////////////
memcpy(&Cipher[8*j] &out 8);
}
return 1;
}else
{
int ext = length/8;
int dst = length%8;
char * temp_in ;
char * temp_add;
temp_in = (char *) malloc((ext+1)*8);
temp_add = (char *)malloc(8-dst);
memcpy(&temp_in[0] &Msg[0] length);
memset(temp_add 0 8-dst);
memcpy(&temp_in[length]&temp_add[0] 8-dst);
int round = ext+1;
char out [8];
char in[8];
for (int j=0;j {
memcpy(&in[0] &temp_in[8*j] 8);
encrypt(in keyarray1 out);
decrypt(out keyarray2 in);
encrypt(in keyarray3 out);
memcpy(&Cipher[8*j] &out 8);
}
return 1;
}
}
void encrypt(char In[8] const char Key[8] char Out[8])
{
Des_SetKey(Key);
static bool M[64] Tmp[32] *Li = &M[0] *Ri = &M[32];
ByteToBit(M In 64);
Transform(M M IP_Table 64);
for(int i=0; i<16; i++)
{
memcpy(Tmp Ri 32);
F_func(Ri SubKey[i]);
Xor(Ri Li 32);
memcpy(Li Tmp 32);
}
Transform(M M IPR_Table 64);
BitToByte(Out M 64);
}
/************************解密*********************************/
int Decrypt(char *Msg char *Key char *Cipherint length)//如果消息长度不是8的倍数,末位补0凑成8的倍数。
{
if(length <=0)
{
return -1;
}
char keyarray1[8];
char keyarray2[8];
char keyarray3[8];
memcpy(&keyarray1 &Key[0] 8);
memcpy(&keyarray2 &Key[8] 8);
memcpy(&keyarray3 &Key[16] 8);
if (length%8==0)
{
int dst = length/8;
char out [8];
char in[8];
for (int j=0;j {
memcpy(&in[0] &Msg[8*j] 8);
decrypt(in keyarray3 out);
encrypt(out keyarray2 in);
decryp
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5862 2013-09-26 18:17 My_3DES\3DES\3des.cpp
文件 4380 2013-09-26 18:17 My_3DES\3DES\3DES.dsp
文件 533 2013-09-26 18:15 My_3DES\3DES\3DES.dsw
文件 4764 2013-09-16 18:24 My_3DES\3DES\3des.h
文件 33792 2013-09-26 18:43 My_3DES\3DES\3DES.ncb
文件 48640 2013-09-26 18:43 My_3DES\3DES\3DES.opt
文件 1285 2013-09-26 18:36 My_3DES\3DES\3DES.plg
文件 159808 2013-09-26 18:36 My_3DES\3DES\Debug\3DES.exe
文件 172184 2013-09-26 18:36 My_3DES\3DES\Debug\3DES.ilk
文件 15795 2013-09-26 18:17 My_3DES\3DES\Debug\3des.obj
文件 204776 2013-09-26 18:18 My_3DES\3DES\Debug\3DES.pch
文件 410624 2013-09-26 18:36 My_3DES\3DES\Debug\3DES.pdb
文件 4309 2013-09-26 18:36 My_3DES\3DES\Debug\main.obj
文件 33792 2013-09-26 18:36 My_3DES\3DES\Debug\vc60.idb
文件 53248 2013-09-26 18:36 My_3DES\3DES\Debug\vc60.pdb
文件 1454 2013-09-26 18:36 My_3DES\3DES\main.cpp
目录 0 2013-09-26 18:36 My_3DES\3DES\Debug
目录 0 2013-09-26 18:43 My_3DES\3DES
目录 0 2013-09-26 18:15 My_3DES
----------- --------- ---------- ----- ----
1155246 19
- 上一篇:简单的C语言点对点聊天程序
- 下一篇:C流程图生成器,用C语言代码 生成C语言流程图
相关资源
- 基于图割的图像分割OpenCV+MFC实现
- MFC实现的红绿灯程序
- 3DES加密算法C++实现
- DES/3DES算法C语言实现
- DES和3DES加密算法,C语言,适用于单片
- 页面置换算法用MFC实现了
- MFC实现画板
- 用MFC实现的简单qq聊天
- MFC实现简易画图程序
- SNL语言编译器GUI VC++ 2008版 MFC实现可
- MFC实现可编辑Excel文件
- 超市库存管理系统的MFC实现
- 使用MFC实现真实感图形绘制
- MFC实现简单计算器支持加减乘除和括
- 一元二次方程求解MFC实现
- 迷宫MFC实现最短路径,有简单界面迷
- 二叉树 VC6.0 MFC实现 数据结构
- 用MFC实现的图像处理源代码总集
- 图像边缘提取经典算法MFC实现
- MFC实现dem的读取与现实
- MFC实现RSA算法
- tcp客户端程序之mfc实现
- TSP 蚁群算法 MFC实现
- VC实现虚拟打印机的框架源代码
- MFC实现多任务多线程软件
- FTP客户端VC实现
- 用c++编写的打气球的游戏,用MFC实现
- MFC实现高仿画板、绘图软件功能带详
- 冒泡排序MFC实现
- [毕业分享] MFC实现数字图像处理软件
评论
共有 条评论