I need a COM object (In C/C++ or VB) for Windows that performs AES encryption and is compatible with the sample JAVA encryption/decryption code below (see deliverables section). My client does not have or want Java and I need a COM component that he can use easily. I need to be able to set and compile the IV and Key and deliver the COM object (dll) to the client for his use. He should only need to pass in a string for either encryption or decryption (and receive the resultant string). I don't have a lot of money, but this is worth over $100 to me. The code must be unrestricted for private commercial use. Thanks!
## Deliverables
1) Complete and fully-functional working program(s) in executable form as well as complete source code of all work done.
2) Deliverables must be in ready-to-run condition, as follows (depending on the nature of the deliverables):
a) There must be no memory leaks or performance problems.
b) The COM object must be lightweight and include no other encryption or other code that is not specified.
c) The COM object must be able to be registered and used on Windows 2000 and Windows NT.
3) All deliverables will be considered "work made for hire" under U.S. Copyright law. Buyer will receive exclusive and complete copyrights to all work purchased.
4) Here's the sample Java code with which the COM component must be compatible:
import java.io.*;
import java.net.*;
import javax.crypto.*;
import javax.crypto.spec.*;
public class EncryptionTest4 {
public static String PadString(String in)
{
int slen = ([login to view URL]() % 16);
int i = (16 - slen);
if ((i > 0) && (i < 16)){
StringBuffer buf = new StringBuffer([login to view URL]() + i);
[login to view URL](0, in);
for (i = (16 - slen); i > 0; i--) {
[login to view URL](" ");
}
[login to view URL]("padded = " + [login to view URL]());
return [login to view URL]();
}
else {
return in;
}
}
public static String toHexString(byte bytes[])
{
StringBuffer buffer = new StringBuffer([login to view URL] * 2);
for (int i = 0; i < [login to view URL]; i++)
{
if (((int) bytes[i] & 0xff) < 0x10)
[login to view URL]("0");
[login to view URL]([login to view URL]((int) bytes[i] & 0xff, 16));
}
return [login to view URL]();
}
public static final byte[] fromHexString(String hex)
{
byte[] data = new byte[[login to view URL]() / 2];
for (int i = 0; i < [login to view URL]; i++)
{
String subStr = [login to view URL](2 * i, 2 * i + 2);
data[i] = (byte) [login to view URL](subStr, 16);
}
return data;
}
public static void **main**(String[] args) throws IOException {
try {
//**Encryption
**///Want to pad then encrypt then convert to hex
// (corresponding PHP mcrypt library function pads with spaces)
//**Decryption
**//Want to convert from hex, then decrypt, then trim
Cipher cipher = [login to view URL]("AES/CBC/NoPadding");
SecretKeySpec keySpec = new
SecretKeySpec("thistest12qwqwqw".getBytes(), "AES");
IvParameterSpec ivSpec = new
IvParameterSpec("doesthis12qwqwqw".getBytes());
[login to view URL](Cipher.ENCRYPT_MODE, keySpec, ivSpec);
//note that we encrypt the lower case version of the string!
byte[] encText = [login to view URL]((PadString(args[0].toLowerCase())).getBytes());
String encryptedString = toHexString(encText);
[login to view URL]("encryptedString: " + encryptedString);
[login to view URL](Cipher.DECRYPT_MODE, keySpec, ivSpec);
byte[] decText = [login to view URL](fromHexString(encryptedString));
[login to view URL]("decrypted string = " + (new String(decText).trim()))
}
catch(Exception e) {
[login to view URL]([login to view URL]());
}
}
}
## Platform
Windows 2000, NT