📄 rsa.c
字号:
#include "rsa_incl.h"#include "r_random.h"#include "rsa.h"#include "nn.h"static int rsapublicfunc PROTO_LIST((unsigned char *, unsigned int *, unsigned char *, unsigned int, R_RSA_PUBLIC_KEY *));static int rsaprivatefunc PROTO_LIST((unsigned char *, unsigned int *, unsigned char *, unsigned int, R_RSA_PRIVATE_KEY *));int mainrsa(){// int status;// R_RSA_PUBLIC_KEY publicKey; /* new RSA public key */// R_RSA_PRIVATE_KEY privateKey; /* new RSA private key */ R_RSA_PROTO_KEY protoKey; /* RSA prototype key */ R_RANDOM_STRUCT randomStruct; /* random structure */ R_RSA_PUBLIC_KEY publicKey1; /* new RSA public key */ R_RSA_PRIVATE_KEY privateKey1; /* new RSA private key */// unsigned char output[128]; unsigned int outputLen; /* length of output block */// unsigned char input[130]; /* input block */ unsigned int inputLen=117; /* length of input block */ FILE * infile; FILE * outfile;// DWORD start,end; char filename[100]; R_RandomCreate(&randomStruct); protoKey.bits=1024; protoKey.useFermat4=1; strcpy(filename,"PEMKeys");// status=R_GeneratePEMKeys(&publicKey, &privateKey, &protoKey, &randomStruct);// SaveKeys(filename,publicKey,privateKey); LodeKeys(filename,&publicKey1,&privateKey1);//////////////////////////////////////////////////////////////////* infile=fopen("input.txt","rb"); outfile=fopen("output.txt","wb"); fseek(infile, 0L, SEEK_END); inputLen=ftell(infile); fseek(infile,0L,SEEK_SET); FilePrivateEncrypt (outfile, &outputLen, infile, inputLen,&privateKey1); fclose(infile); fclose(outfile); infile=fopen("output.txt","rb"); outfile=fopen("output2.txt","wb"); fseek(infile, 0L, SEEK_END); inputLen=ftell(infile); fseek(infile,0L,SEEK_SET); FilePublicDecrypt (outfile, &outputLen, infile, inputLen,&publicKey1); fclose(infile); fclose(outfile);*/ infile=fopen("input.txt","rb"); outfile=fopen("output.txt","wb"); fseek(infile, 0L, SEEK_END); inputLen=ftell(infile); fseek(infile,0L,SEEK_SET); FilePublicEncrypt (outfile, &outputLen, infile, inputLen,&publicKey1); fclose(infile); fclose(outfile); infile=fopen("output.txt","rb"); outfile=fopen("output2.txt","wb"); fseek(infile, 0L, SEEK_END); inputLen=ftell(infile); fseek(infile,0L,SEEK_SET); FilePrivateDecrypt (outfile, &outputLen, infile, inputLen,&privateKey1); fclose(infile); fclose(outfile);///////////////////////////////////////////////////////////////////////////////* R_memcpy(input,"ScanDisk checked drive C for problems, with the following results: Directory structure Scan Disk did not perform any.\0",inputLen+1); inputLen=117; printf("%s\n",input); start = timeGetTime(); status=RSAPublicEncrypt(output, &outputLen, input, inputLen, &publicKey1); end = timeGetTime(); output[outputLen]=0; printf("%s--%d\n",output,outputLen); printf("PublicEncrypt time:%u\n" , end-start ); R_memcpy(input,output,outputLen); inputLen=outputLen; start = timeGetTime(); status=RSAPrivateDecrypt(output, &outputLen, input, inputLen, &privateKey1); end = timeGetTime(); output[outputLen]=0; printf("%s--%d\n",output,outputLen); printf("PrivateDecrypt time:%u\n" , end-start ); R_memcpy(input,output,outputLen); inputLen=outputLen; start = timeGetTime(); status=RSAPrivateEncrypt(output, &outputLen, input, inputLen, &privateKey1); end = timeGetTime(); output[outputLen]=0; printf("%s--%d\n",output,outputLen); printf("PrivateEncrypt time:%u\n" , end-start ); R_memcpy(input,output,outputLen); inputLen=outputLen; start = timeGetTime(); status=RSAPublicDecrypt(output, &outputLen, input, inputLen, &publicKey1); end = timeGetTime(); output[outputLen]=0; printf("%s--%d\n",output,outputLen); printf("PublicDecrypt time:%u\n" , end-start );*/ return 0;}int SaveKeys(char* filename,R_RSA_PUBLIC_KEY publicKey,R_RSA_PRIVATE_KEY privateKey){ FILE* KeyFile; KeyFile=fopen(filename,"wb"); if( KeyFile== NULL ) return 0; fwrite(&publicKey,sizeof(R_RSA_PUBLIC_KEY),1,KeyFile); fwrite(&privateKey,sizeof(R_RSA_PRIVATE_KEY),1,KeyFile); fclose(KeyFile); return 1;}int LodeKeys(char* filename,R_RSA_PUBLIC_KEY * publicKey,R_RSA_PRIVATE_KEY * privateKey){ FILE* KeyFile; KeyFile=fopen(filename,"rb"); if( KeyFile== NULL ) return 0; fread(publicKey,sizeof(R_RSA_PUBLIC_KEY),1,KeyFile); fread(privateKey,sizeof(R_RSA_PRIVATE_KEY),1,KeyFile); fclose(KeyFile); return 1;}int FilePublicEncrypt (FILE * output, unsigned int * outputLen, FILE * input, unsigned int inputLen, R_RSA_PUBLIC_KEY * publicKey){ int ilen=inputLen; int outlen,olen=0; int inlen,ibufsize,obufsize; unsigned char ibuf[MAX_RSA_MODULUS_LEN]; unsigned char obuf[MAX_RSA_MODULUS_LEN]; ibufsize=(publicKey->bits + 7) / 8-11; while(ilen > 0) { inlen = fread(ibuf, sizeof(unsigned char),ibufsize, input); ilen -=inlen; RSAPublicEncrypt(obuf, &outlen, ibuf, inlen,publicKey); obufsize = fwrite(obuf, sizeof(unsigned char), outlen, output); olen+=obufsize; } *outputLen=olen; return 1;}int FilePrivateEncrypt (FILE * output, unsigned int * outputLen, FILE * input, unsigned int inputLen, R_RSA_PRIVATE_KEY * privateKey){ int ilen=inputLen; int outlen,olen=0; int inlen,ibufsize,obufsize; unsigned char ibuf[MAX_RSA_MODULUS_LEN]; unsigned char obuf[MAX_RSA_MODULUS_LEN]; ibufsize=(privateKey->bits + 7) / 8-11; while(ilen > 0) { inlen = fread(ibuf, sizeof(unsigned char),ibufsize, input); ilen -=inlen; RSAPrivateEncrypt(obuf, &outlen, ibuf, inlen,privateKey); obufsize = fwrite(obuf, sizeof(unsigned char), outlen, output); olen+=obufsize; } *outputLen=olen; return 1;}int FilePublicDecrypt (FILE * output, unsigned int * outputLen, FILE * input, unsigned int inputLen, R_RSA_PUBLIC_KEY * publicKey){ int ilen=inputLen; int outlen,olen=0; int inlen,ibufsize,obufsize; unsigned char ibuf[MAX_RSA_MODULUS_LEN]; unsigned char obuf[MAX_RSA_MODULUS_LEN]; ibufsize=(publicKey->bits + 7) / 8; while(ilen > 0) { inlen = fread(ibuf, sizeof(unsigned char),ibufsize, input); ilen -=inlen; RSAPublicDecrypt(obuf, &outlen, ibuf, inlen,publicKey); obufsize = fwrite(obuf, sizeof(unsigned char), outlen, output); olen+=obufsize; } *outputLen=olen; return 1;}int FilePrivateDecrypt (FILE * output, unsigned int * outputLen, FILE * input, unsigned int inputLen, R_RSA_PRIVATE_KEY * privateKey){ int ilen=inputLen; int outlen,olen=0; int inlen,ibufsize,obufsize; unsigned char ibuf[MAX_RSA_MODULUS_LEN]; unsigned char obuf[MAX_RSA_MODULUS_LEN]; ibufsize=(privateKey->bits + 7) / 8; while(ilen > 0) { inlen = fread(ibuf, sizeof(unsigned char),ibufsize, input); ilen -=inlen; RSAPrivateDecrypt(obuf, &outlen, ibuf, inlen,privateKey); obufsize = fwrite(obuf, sizeof(unsigned char), outlen, output); olen+=obufsize; } *outputLen=olen; return 1;}/* RSA encryption, according to RSADSI's PKCS #1. *///int RSAPublicEncrypt(output, outputLen, input, inputLen, publicKey, randomStruct)int RSAPublicEncrypt(output, outputLen, input, inputLen, publicKey)unsigned char *output; /* output block */unsigned int *outputLen; /* length of output block */unsigned char *input; /* input block */unsigned int inputLen; /* length of input block */R_RSA_PUBLIC_KEY *publicKey; /* RSA public key *///R_RANDOM_STRUCT *randomStruct; /* random structure */{ int status; unsigned char byte, pkcsBlock[MAX_RSA_MODULUS_LEN]; unsigned int i, modulusLen; modulusLen = (publicKey->bits + 7) / 8; if(inputLen + 11 > modulusLen) return(RE_LEN);/* R_GetRandomBytesNeeded(&i, randomStruct); if(i != 0) return(RE_NEED_RANDOM); *pkcsBlock = 0; // PKCS Block Makeup // block type 2 *(pkcsBlock+1) = 2; for(i = 2; i < modulusLen - inputLen - 1; i++) { // Find nonzero random byte. do { // random bytes used to pad the PKCS Block R_GenerateBytes(&byte, 1, randomStruct); }while(byte == 0); *(pkcsBlock+i) = byte; } // separator pkcsBlock[i++] = 0; R_memcpy((POINTER)&pkcsBlock[i], (POINTER)input, inputLen);*/ i=0; *pkcsBlock = 0; // PKCS Block Makeup // block type 2 *(pkcsBlock+1) = 2; for(i = 2; i < modulusLen - inputLen - 1; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -