基于异或,取反和循环移位实现一个简单的加密解密函数
生活随笔
收集整理的這篇文章主要介紹了
基于异或,取反和循环移位实现一个简单的加密解密函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 字節循環右移
unsigned char RorByte(unsigned char bData, size_t shift)
{unsigned char temp = bData >> (8 - shift);bData = bData << shift;bData = bData | temp;return bData;
}// 加密函數:先與密鑰異或,然后取反,然后右移3位
void NaiveEncrypt(void *pData, size_t byteDataLen, const void *pKey, const size_t byteKeyLen)
{size_t uDataIndex = 0, uKeyIndex = 0;for (; uDataIndex < byteDataLen; uDataIndex++){((char *)pData)[uDataIndex] = ((char*)pData)[uDataIndex] ^ ((char *)pKey)[uKeyIndex];((char *)pData)[uDataIndex] = ~((char *)pData)[uDataIndex];RorByte(((unsigned char *)pData)[uDataIndex], 3);uKeyIndex++;if (uKeyIndex == byteKeyLen) uKeyIndex = 0;}
}// 解密函數:先右移5位,再取反,在與密鑰異或
void NaiveDecrypt(void *pData, size_t byteDataLen, const void *pKey, const size_t byteKeyLen)
{size_t uDataIndex = 0, uKeyIndex = 0;for (; uDataIndex < byteDataLen; uDataIndex++){RorByte(((unsigned char *)pData)[uDataIndex], 5);((char *)pData)[uDataIndex] = ~((char *)pData)[uDataIndex];((char *)pData)[uDataIndex] = ((char *)pData)[uDataIndex] ^ ((char *)pKey)[uKeyIndex];uKeyIndex++;if (uKeyIndex == byteKeyLen) uKeyIndex = 0;}
}
使用起來也是非常簡單
int main() {// 這里用字符串演示,實際上可以加密任意字節流char data[] = "some plain text";size_t dataLen = strlen(data);char key[] = "123456";size_t keyLen = strlen(key);printf("加密前\n");for (size_t i = 0; i < dataLen; i++){printf("%02X ", (unsigned char)data[i]);}printf("\n\n");// 加密NaiveEncrypt(data, dataLen, key, keyLen);printf("加密后\n");for (size_t i = 0; i < dataLen; i++){printf("%02X ", (unsigned char)data[i]);}printf("\n\n");// 解密NaiveEncrypt(data, dataLen, key, keyLen);printf("解密后\n");for (size_t i = 0; i < dataLen; i++){printf("%02X ", (unsigned char)data[i]);}printf("\n\n");return 0; }總結
以上是生活随笔為你收集整理的基于异或,取反和循环移位实现一个简单的加密解密函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PE工具函数(新)
- 下一篇: WIN32 窗口枚举和操作