📄 rsaoperation.cpp
字号:
// RSAOperation.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include <stdio.h>
#include "RSAOperation.h"
#ifdef _MANAGED
#pragma managed(push, off)
#endif
#include "bigd.h"
#include "bigdigits.h"
#define KEY_FILE_BUFFER_LEN 4096
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
#ifdef _MANAGED
#pragma managed(pop)
#endif
RSA_API bool RSAEncrypt(unsigned char rsaExponent[], int exponentSize, unsigned char rsaModulus[], int modulusSize, unsigned char dataToEncrypt[], int *dataLength, unsigned char encryptedData[])
{
DIGIT_T *my_e = mpAlloc(modulusSize);
DIGIT_T *my_n = mpAlloc(modulusSize);
DIGIT_T *my_c = mpAlloc(modulusSize);
DIGIT_T *my_m = mpAlloc(modulusSize);
mpConvFromOctets(my_e, exponentSize, rsaExponent, exponentSize);
//pr_msg("my_e=\n", my_e);
mpConvFromOctets(my_n, modulusSize, rsaModulus, modulusSize);
//pr_msg("my_n=\n", my_n);
mpConvFromOctets(my_m, modulusSize, dataToEncrypt, *dataLength);
//pr_msg("m=\n", my_m);
mpModExp(my_c, my_m, my_e, my_n, modulusSize);
//pr_msg("c=\n", my_c);
size_t encryptedDataSize = mpConvToOctets(my_c, modulusSize, encryptedData, 0);
mpConvToOctets(my_c, modulusSize, encryptedData, encryptedDataSize);
*dataLength = (int)encryptedDataSize;
mpFree(&my_e);
mpFree(&my_n);
mpFree(&my_c);
mpFree(&my_m);
return true;
}
RSA_API bool RSADecrypt(unsigned char rsaExponent[], int exponentSize, unsigned char rsaModulus[], int modulusSize, unsigned char dataToDecrypt[], unsigned char decryptedData[], int *dataLength)
{
DIGIT_T *my_d = mpAlloc(modulusSize);
DIGIT_T *my_n = mpAlloc(modulusSize);
DIGIT_T *my_c = mpAlloc(modulusSize);
DIGIT_T *my_m = mpAlloc(modulusSize);
mpConvFromOctets(my_d, modulusSize, rsaExponent, exponentSize);
//pr_msg("my_d=\n", my_d);
mpConvFromOctets(my_n, modulusSize, rsaModulus, modulusSize);
//pr_msg("my_n=\n", my_n);
mpConvFromOctets(my_m, modulusSize, dataToDecrypt, *dataLength);
//pr_msg("c=\n", my_m);
mpModExp(my_c, my_m, my_d, my_n, modulusSize);
size_t dataSize = mpConvToOctets(my_c, modulusSize, decryptedData, 0);
//if (*bufferLength < (int)dataSize)
// return false;
mpConvToOctets(my_c, modulusSize, decryptedData, dataSize);
*dataLength = (int)dataSize;
mpFree(&my_d);
mpFree(&my_n);
mpFree(&my_c);
mpFree(&my_m);
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -