Comment implémenter le cryptage AES Java 256 bits avec CBC

J'ai lu les threads suivants et ils ont aidé un peu, mais je suis à la recherche d'un peu plus d'infos.

Comment écrire AES/SRC/PKCS5Padding chiffrement et le déchiffrement de l'Initialisation du Vecteur de paramètres pour BlackBerry

Java 256 bits AES

Fondamentalement, ce que je suis en train de faire est d'écrire un programme qui permet de chiffrer une demande afin d'être envoyés sur TCP/IP, puis déchiffré par un programme serveur. Le codage doivent être AES, et en faisant quelques recherches, j'ai découvert que j'avais besoin d'utiliser la SRC et PKCS5Padding. Donc en gros j'ai besoin d'une clé secrète et un IV ainsi.

L'application que je suis en développement est pour un téléphone, donc je veux utiliser le java logiciels de sécurité pour maintenir la taille vers le bas. J'ai le design, mais pas sûr de la mise en œuvre de la IV et la clé partagée.

Voici un code:

//My user name
byte[] loginId = "login".getBytes();

byte[] preSharedKey128 = "ACME-1234AC".getBytes();
byte[] preSharedKey192 = "ACME-1234ACME-1234A".getBytes();
//256 bit key
byte[] preSharedKey256 = "ACME-1234ACME-1234ACME-1234".getBytes();
byte[] preSharedKey = preSharedKey256;

//Initialization Vector
//Required for CBC
byte[] iv ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
IvParameterSpec ips = new IvParameterSpec(iv);


byte[] encodedKey = new byte[loginId.length + preSharedKey.length];

System.arraycopy(loginId, 0, encodedKey, 0, loginId.length);
System.arraycopy(preSharedKey, 0, encodedKey, loginId.length, preSharedKey.length);

//The SecretKeySpec provides a mechanism for application-specific generation
//of cryptography keys for consumption by the Java Crypto classes.

//Create a key specification first, based on our key input.
SecretKey aesKey = new SecretKeySpec(encodedKey, "AES");

//Create a Cipher for encrypting the data using the key we created.
Cipher encryptCipher;

encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//Initialize the Cipher with key and parameters
encryptCipher.init(Cipher.ENCRYPT_MODE, aesKey, ips);

//Our cleartext
String clearString = "33,8244000,9999,411,5012022517,0.00,0,1,V330";
byte[] cleartext = clearString.getBytes();

//Encrypt the cleartext
byte[] ciphertext = encryptCipher.doFinal(cleartext);

//Now decrypt back again...
//Decryption cipher
Cipher decryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//Initialize PBE Cipher with key and parameters
decryptCipher.init(Cipher.DECRYPT_MODE, aesKey, ips);

//Decrypt the cleartext
byte[] deciphertext = decryptCipher.doFinal(ciphertext);

En un mot ce qu'il doit faire est de chiffrer un message qui peut décrypté par le serveur sans serveur besoin d'obtenir une clé ou IV à partir du téléphone. Est-il une manière que je pourrais le faire si je pouvais fixer le IV et la clé sur le téléphone, et toujours avoir la clé et IV connues par le serveur? Hésitez pas à me dire pour rendre les choses plus claires si elles ne le sont pas.

source d'informationauteur Stevus