|
I am running WinNT 4.0 w/SP5, MSVC 6.0, and
openssl-0.9.4.
The openssl compilation works fine. However,
the DLLs behave differently on different machines. Our executable was
developed on a Dell PC, and the DLLs work fine on Dells, but don't work on
Compaq for instance. If we compile the openssl project on the Compaq, then
our program works. When building the project, I use "ms\do_ms" so as to
not include the assembly routines. Does anyone know why this would be
machine specific? Please send the response to [EMAIL PROTECTED]. Thank
you.
Here is some sample code:
#include <iostream.h>
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/blowfish.h> #include <openssl/des.h> #include "common.hxx" string escClass;
/////////////////////////////////////////////////////
// // Uppercase() // // Takes a pointer to a string and converts all // chars in that string to uppercase. //////////////////////////////////////////////////// char *Uppercase(char *str)
{ int i; for (i = 0; i < strlen(str); i++) { str[i] = toupper(str[i]); } return str; // Returns address of argument } char *EncryptData(BF_KEY *ks, char *indata)
{
unsigned char *ivec=new unsigned
char[strlen(indata)];
char *outdata=new char[strlen(indata)]; int num=0; BF_cfb64_encrypt((unsigned char *)indata,
(unsigned char *)outdata, strlen(indata), ks, ivec, &num,
BF_ENCRYPT);
return outdata; } char *DecryptData(BF_KEY *ks, char *indata)
{
unsigned char *ivec=new unsigned
char[strlen(indata)];
char *outdata=new char[strlen(indata)]; int num=0, datalen=0; escClass.str_unescape(indata,
&datalen);
BF_cfb64_encrypt((unsigned char *)indata, (unsigned char *)outdata, datalen, ks, ivec, &num, BF_DECRYPT); outdata[datalen]='\0'; return outdata; } void main(int argc, char *argv[]) {
BF_KEY *ks=new BF_KEY;
char *keydata=new char[256]; char *action=new char[256]; char *indata=new char[8000]; char *outdata=new char[8000]; strcpy(keydata,
"djwidjsnbncbsjeidslaldkdjsi");
BF_set_key(ks, strlen(keydata), (unsigned char *)keydata); if (argc<2) { printf("USAGE:\n\nss ENCRYPT <TEXT TO ENCRYPT>\n"); printf("ss DECRYPT <TEXT TO DECRYPT>\n"); printf("\nThe following options allow one line of text that is to be encrypted/decrypted\n"); printf("to be entered via stdin:\n"); printf("ss SENCRYPT\n"); printf("ss SDECRYPT\n"); exit(0); } strcpy(action, argv[1]); Uppercase(action); if (strcmp(action, "ENCRYPT")==0 || strcmp(action, "DECRYPT")==0) strcpy(indata, argv[2]); if (strcmp(action, "ENCRYPT")==0) { outdata=EncryptData(ks, indata); printf("%s\n", escClass.str_escape((unsigned char *)outdata, strlen(indata))); } else if (strcmp(action, "DECRYPT")==0) { outdata=DecryptData(ks, indata); printf("%s\n", outdata); } else if (strcmp(action, "SENCRYPT")==0) { fgets(indata, 8000, stdin); outdata=EncryptData(ks, indata); printf("%s\n", escClass.str_escape((unsigned char *)outdata, strlen(indata))); } else if (strcmp(action, "SDECRYPT")==0) { fgets(indata, 8000, stdin); outdata=DecryptData(ks, indata); for (int x=0; x<strlen(outdata); x++) if (outdata[x]=='\n') outdata[x]='\0'; printf("%s\n", outdata); } delete keydata; delete action; delete indata; delete outdata; } |
