-
-
Save ximik777/cb66178f2106b605ca5616e7d41ff92f to your computer and use it in GitHub Desktop.
A simple example of using AES encryption in Java and C.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
/* | |
* MCrypt API available online: | |
* http://linux.die.net/man/3/mcrypt | |
*/ | |
#include <mcrypt.h> | |
#include <math.h> | |
#include <stdint.h> | |
#include <stdlib.h> | |
int encrypt( | |
void* buffer, | |
int buffer_len, /* Because the plaintext could include null bytes*/ | |
char* IV, | |
char* key, | |
int key_len | |
){ | |
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL); | |
int blocksize = mcrypt_enc_get_block_size(td); | |
if( buffer_len % blocksize != 0 ){return 1;} | |
mcrypt_generic_init(td, key, key_len, IV); | |
mcrypt_generic(td, buffer, buffer_len); | |
mcrypt_generic_deinit (td); | |
mcrypt_module_close(td); | |
return 0; | |
} | |
int decrypt( | |
void* buffer, | |
int buffer_len, | |
char* IV, | |
char* key, | |
int key_len | |
){ | |
MCRYPT td = mcrypt_module_open("rijndael-128", NULL, "cbc", NULL); | |
int blocksize = mcrypt_enc_get_block_size(td); | |
if( buffer_len % blocksize != 0 ){return 1;} | |
mcrypt_generic_init(td, key, key_len, IV); | |
mdecrypt_generic(td, buffer, buffer_len); | |
mcrypt_generic_deinit (td); | |
mcrypt_module_close(td); | |
return 0; | |
} | |
void display(char* ciphertext, int len){ | |
int v; | |
for (v=0; v<len; v++){ | |
printf("%d ", ciphertext[v]); | |
} | |
printf("\n"); | |
} | |
int main() | |
{ | |
MCRYPT td, td2; | |
char * plaintext = "test text 123"; | |
char* IV = "AAAAAAAAAAAAAAAA"; | |
char *key = "0123456789abcdef"; | |
int keysize = 16; /* 128 bits */ | |
char* buffer; | |
int buffer_len = 16; | |
buffer = calloc(1, buffer_len); | |
strncpy(buffer, plaintext, buffer_len); | |
printf("==C==\n"); | |
printf("plain: %s\n", plaintext); | |
encrypt(buffer, buffer_len, IV, key, keysize); | |
printf("cipher: "); display(buffer , buffer_len); | |
decrypt(buffer, buffer_len, IV, key, keysize); | |
printf("decrypt: %s\n", buffer); | |
return 0; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.security.MessageDigest; | |
import java.util.Arrays; | |
import javax.crypto.KeyGenerator; | |
import javax.crypto.SecretKey; | |
import javax.crypto.spec.SecretKeySpec; | |
import javax.crypto.spec.IvParameterSpec; | |
import javax.crypto.Cipher; | |
import javax.crypto.spec.IvParameterSpec; | |
import javax.crypto.spec.SecretKeySpec; | |
public class AES { | |
static String IV = "AAAAAAAAAAAAAAAA"; | |
static String plaintext = "test text 123\0\0\0"; /*Note null padding*/ | |
static String encryptionKey = "0123456789abcdef"; | |
public static void main(String [] args) { | |
try { | |
System.out.println("==Java=="); | |
System.out.println("plain: " + plaintext); | |
byte[] cipher = encrypt(plaintext, encryptionKey); | |
System.out.print("cipher: "); | |
for (int i=0; i<cipher.length; i++) | |
System.out.print(new Integer(cipher[i])+" "); | |
System.out.println(""); | |
String decrypted = decrypt(cipher, encryptionKey); | |
System.out.println("decrypt: " + decrypted); | |
} catch (Exception e) { | |
e.printStackTrace(); | |
} | |
} | |
public static byte[] encrypt(String plainText, String encryptionKey) throws Exception { | |
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE"); | |
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES"); | |
cipher.init(Cipher.ENCRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8"))); | |
return cipher.doFinal(plainText.getBytes("UTF-8")); | |
} | |
public static String decrypt(byte[] cipherText, String encryptionKey) throws Exception{ | |
Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE"); | |
SecretKeySpec key = new SecretKeySpec(encryptionKey.getBytes("UTF-8"), "AES"); | |
cipher.init(Cipher.DECRYPT_MODE, key,new IvParameterSpec(IV.getBytes("UTF-8"))); | |
return new String(cipher.doFinal(cipherText),"UTF-8"); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment