H3C-cams DES加密算法研究总结 (3)

寂寂无言 分享 2020-06-22 下载文档

int[] encryptdata = new int[64]; // 加密操作完成后的字节数组 byte[] EncryptCode = new byte[8]; // 密钥初试化成二维数组 int[][] KeyArray = new int[16][48]; // 将密钥字节数组转换成二进制字节数组 keydata = ReadDataToBirnaryIntArray(des_key); // 将加密数据字节数组转换成二进制字节数组 encryptdata = ReadDataToBirnaryIntArray(des_data); // 初试化密钥为二维密钥数组 KeyInitialize(keydata, KeyArray); // 执行加密解密操作

EncryptCode = Encrypt(encryptdata, flags, KeyArray); return EncryptCode; }

// 初试化密钥数组

private void KeyInitialize(int[] key, int[][] keyarray) { int i; int j;

int[] K0 = new int[56];

// 特别注意:xxx[IP[i]-1]等类似变换 for (i = 0; i < 56; i++) {

K0[i] = key[PC_1[i] - 1]; // 密钥进行PC-1变换 }

for (i = 0; i < 16; i++) {

LeftBitMove(K0, LeftMove[i]); // 特别注意:xxx[IP[i]-1]等类似变换 for (j = 0; j < 48; j++) {

keyarray[i][j] = K0[PC_2[j] - 1]; // 生成子密钥keyarray[i][j] } } }

// 执行加密解密操作

private byte[] Encrypt(int[] timeData, int flag, int[][] keyarray) { int i;

byte[] encrypt = new byte[8]; int flags = flag; int[] M = new int[64]; int[] MIP_1 = new int[64];

// 特别注意:xxx[IP[i]-1]等类似变换

for (i = 0; i < 64; i++) {

M[i] = timeData[IP[i] - 1]; // 明文IP变换 }

if (flags == 1) { // 加密 for (i = 0; i < 16; i++) {

LoopF(M, i, flags, keyarray); }

} else if (flags == 0) { // 解密 for (i = 15; i > -1; i--) {

LoopF(M, i, flags, keyarray); } }

for (i = 0; i < 64; i++) {

MIP_1[i] = M[IP_1[i] - 1]; // 进行IP-1运算 }

GetEncryptResultOfByteArray(MIP_1, encrypt);

// 返回加密数据 return encrypt; }

private int[] ReadDataToBirnaryIntArray(byte[] intdata) { int i; int j;

// 将数据转换为二进制数,存储到数组 int[] IntDa = new int[8]; for (i = 0; i < 8; i++) { IntDa[i] = intdata[i]; if (IntDa[i] < 0) { IntDa[i] += 256; IntDa[i] %= 256; } }

int[] IntVa = new int[64]; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) {

IntVa[((i * 8) + 7) - j] = IntDa[i] % 2; IntDa[i] = IntDa[i] / 2; } }

return IntVa; }

private void LeftBitMove(int[] k, int offset) { int i;

// 循环移位操作函数 int[] c0 = new int[28]; int[] d0 = new int[28]; int[] c1 = new int[28]; int[] d1 = new int[28]; for (i = 0; i < 28; i++) { c0[i] = k[i]; d0[i] = k[i + 28]; }

if (offset == 1) {

for (i = 0; i < 27; i++) { // 循环左移一位 c1[i] = c0[i + 1]; d1[i] = d0[i + 1]; }

c1[27] = c0[0]; d1[27] = d0[0]; } else if (offset == 2) {

for (i = 0; i < 26; i++) { // 循环左移两位 c1[i] = c0[i + 2];


H3C-cams DES加密算法研究总结 (3).doc 将本文的Word文档下载到电脑

下一篇:2017小学一年级数学上册易错题整理(苏教版)

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx