本项目采用C语言实现了128位AES(高级加密标准)加密算法,适用于数据安全需求高的场景。
用C语言实现的128位AES加密算法可以运行在JAVA的JNI环境中。
以下是二进制位串转为长度为8的字符串转换函数:
```c
int Bit64ToChar8(ElemType bit_64, ElemType ch_8) {
int cnt;
memset(ch_8, 0, 8);
for (cnt = 0; cnt < 8; cnt++) {
BvtcToBit(bit_64 + (cnt << 3), ch_8 + cnt);
}
return 0;
}
```
以下是生成子密钥的函数:
```c
int DES_Make_Subkeys(ElemType key_64, ElemType subKeys[16][48]) {
int cnt;
ElemType temp_56;
DES_PCI_Transform(key_64, temp_56);
for (cnt = 0; cnt < 16; ++cnt) {
DES_ROL(temp_56, MOVE_TIMES[cnt]);
DES_PC2_Transform(temp_56, subKeys[cnt]);
}
return 0;
}
```
以下是密钥置换的函数:
```c
int DES_PCI_Transform(ElemType key[64], ElemType temp[56]) {
int cnt;
for (cnt = 0; cnt < 56; ++cnt) {
temp[cnt] = key[PCTable[cnt]];
}
return 0;
}
```
以下是循环左移的函数:
```c
int DES_ROL(ElemType data[56], int time) {
ElemType temp_56;
memcpy(temp_56, data + (28 - time), time);
memcpy(data + (28 - time), data, time);
return 0;
}
```
以下是异或操作的函数:
```c
int DES_XOR(Elem_Type R[48], Elem_Type L[48], int count) {
int cnt;
for (cnt = 0; cnt < count; ++cnt)
R[cnt] ^= L[cnt];
return 0;
}
```
以上为部分C语言实现的DES加密算法代码片段,包括生成子密钥、循环左移和异或操作等功能。