Generate Secret Key Aes Java

/ Comments off
  1. Generate Secret Key Aes Java Code
  2. Java Secretkeyspec Aes
  3. Aes Secret Key Generator Java
  4. Java Aes Encryption Example
  • Key generators are constructed using one of the getInstance class methods of this class. KeyGenerator objects are reusable, i.e., after a key has been generated, the same KeyGenerator object can be re-used to generate further keys. There are two ways to generate a key: in an algorithm-independent manner.
  • Java Cryptography - KeyGenerator - Java provides KeyGenerator class this class is used to generate secret keys and objects of this class are reusable.
  • To generate secrete key we can use Java KeyGenerator class which provides the functionality of a secret (symmetric) key generator. Key generators are constructed using one of the getInstance class methods of this class. GetInstance method of KeyGenerator takes parameter name of algorithm and Returns a KeyGenerator object that generates secret keys for the specified algorithm. This method traverses the list of registered security.
Greenhorn

May 20, 2016  Diffie-Hellman key agreement (DH) is a way for two parties to agree on a symmetric secret key without explicitly communicating that secret key. As such, it provides a way for the parties to negotiate a shared AES cipher key or HMAC shared secret over a potentially insecure channel. It does not by itself provide authentication, however, so it is. AES uses the same secret key is used for the both encryption and decryption. Unlike AES 128 bit encryption and decryption, if we need a stronger AES 256 bit key, we need to have Java cryptography extension (JCE) unlimited strength jurisdiction policy files.

posted 11 years ago
  • 1
I have written a below program to encrypt a file with AES 128 algorithm. This code works fine. It does encrypt and decrypt file successfully.
Here in this code I am generating SecretKey in the main() method with the use of key generator. But can anybody please tell me how can I generate SecretKey based on user's password in the below program?
Thanks in Advance,
Jenish
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.KeyGenerator;
import java.security.spec.AlgorithmParameterSpec;
public class AESEncrypter
{
Cipher ecipher;
Cipher dcipher;
public AESEncrypter(SecretKey key)
{
// Create an 8-byte initialization vector
byte[] iv = new byte[]
{
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
};
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
try
{
ecipher = Cipher.getInstance('AES/CBC/PKCS5Padding');
dcipher = Cipher.getInstance('AES/CBC/PKCS5Padding');
// CBC requires an initialization vector
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
}
catch (Exception e)
{
e.printStackTrace();
}
}
// Buffer used to transport the bytes from one stream to another
byte[] buf = new byte[1024];
public void encrypt(InputStream in, OutputStream out)
{
try
{
// Bytes written to out will be encrypted
out = new CipherOutputStream(out, ecipher);
// Read in the cleartext bytes and write to out to encrypt
int numRead = 0;
while ((numRead = in.read(buf)) >= 0)
{
out.write(buf, 0, numRead);
}
out.close();
}
catch (java.io.IOException e)
{
}
}
public void decrypt(InputStream in, OutputStream out)
{
try
{
// Bytes read from in will be decrypted
in = new CipherInputStream(in, dcipher);
// Read in the decrypted bytes and write the cleartext to out
int numRead = 0;
while ((numRead = in.read(buf)) >= 0)
{
out.write(buf, 0, numRead);
}
out.close();
}
catch (java.io.IOException e)
{
}
}
public static void main(String args[])
{
try
{
// Generate a temporary key. In practice, you would save this key.
// See also e464 Encrypting with DES Using a Pass Phrase.
KeyGenerator kgen = KeyGenerator.getInstance('AES');
kgen.init(128);
SecretKey key = kgen.generateKey();
// Create encrypter/decrypter class
AESEncrypter encrypter = new AESEncrypter(key);
// Encrypt
encrypter.encrypt(new FileInputStream('E:keeper.txt'),new FileOutputStream('E:Encrypted.txt'));
// Decrypt
encrypter.decrypt(new FileInputStream('E:keeper.txt'),new FileOutputStream('E:Decrypted.txt'));
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
Ranch Hand
posted 11 years ago
You can use the PBKDF2 algorithm to generate a key from a password; see this answer from a while ago.
Please make sure you use a different, random Initialisation Vector for each password-based key and each message, and save it with the encrypted data. Otherwise each message using the same key and starting with the same data will be encrypted the same, giving attackers a head start.
Greenhorn
posted 11 years ago
Hi,
Thanks for your reply.
I have tried copy pasting the code from the thread you mentioned but I got the exception on line
SecretKeyFactory factory = SecretKeyFactory.getInstance('PBKDF2WithHmacSHA1');
java.security.NoSuchAlgorithmException: Algorithm PBKDF2WithHmacSHA1 not available
at javax.crypto.SunJCE_b.a(DashoA12275)
at javax.crypto.SecretKeyFactory.getInstance(DashoA12275)
at ftpserver.AESEncrypter.main(AESEncrypter.java:107)
Can you please tell me what is wrong with my code?
Thanks in Advance,
Jenish
author
posted 11 years ago

Can you please tell me what is wrong with my code?


What version of Java are you using? I believe that algorithm was added with Java 6.
Henry

Books: Java Threads, 3rd Edition, Jini in a Nutshell, and Java Gems (contributor)

Greenhorn
posted 11 years ago
Carey's code snippet from the other thread works just fine for me using the Sun JDK 1.5 and Sun's own built-in JCE provider.

Generate Secret Key Aes Java Code

Ranch Hand
posted 11 years ago
That's the stack trace I get from J2RE 1.4.2. Even if for some reason you can't move to a supported version of Java, it's still a good algorithm, and you should be able to find a compatible version somewhere.
Greenhorn
posted 11 years ago
Hey it worked fine I just changed my JRE version.
Thanks a lot for this wonderful program Carey.
Greenhorn
posted 9 years ago
Hi, I'm new to encryption. Was wondering how can I store the key or print out the value of the key? Thanks!
Rancher
posted 9 years ago

lily ch wrote:Hi, I'm new to encryption. Was wondering how can I store the key or print out the value of the key? Thanks!


encryption keys are binary. They don't print well. You can store them in a file by just writing out the binary bytes, but you can't read or print the binary. Generate Secret Key Aes JavaGenerate Secret Key Aes Java
Most folks wrap the binary in a text-based encoding, usually base64 or mime.
Greenhorn
posted 7 years ago
Encryption using AES with key password

https://coderanch.com/t/581824/java/java/Decrypt-AES-password

Description

Gets a secure key value for use in the Encrypt function.

Returns

A string that contains the encryption key.

Category

Security functions, String functions

Java Secretkeyspec Aes

Function syntax

GenerateSecretKey(algorithm [,keysize])

See also

Aes Secret Key Generator Java

Decrypt, Encrypt

History

ColdFusion 8: Added the keysize parameter.
ColdFusion MX 7: Added this function.

Parameters

Parameter

Description

algorithm

The encryption algorithm for which to generate the key. ColdFusion installs a cryptography library with the following algorithms:

  • AES: the Advanced Encryption Standard specified by the National Institute of Standards and Technology (NIST) FIPS-197.
  • BLOWFISH: the Blowfish algorithm defined by Bruce Schneier.
  • DES: the Data Encryption Standard algorithm defined by NIST FIPS-46-3.
  • DESEDE: the 'Triple DES' algorithm defined by NIST FIPS-46-3.

keysize

Number of bits requested in the key for the specified algorithm.You can use this to request longer keys when allowed by the JDK. For example, the AES algorithm keys are limited to 128 bits unless the Java Unlimited Strength Jurisdiction Policy Files are installed. For more information, see http://java.sun.com/products/jce/index-14.html.

Usage

Dawn of war 3 cd key generator. You cannot use the GenerateSecretKey function to generate a key for the ColdFusion default encryption algorithm (CFMX_COMPAT) of the Encrypt and Decrypt functions.
ColdFusion uses the Java Cryptography Extension (JCE) and installs a Sun Java runtime that includes the Sun JCE default security provider. This provider includes the algorithms listed in the Parameters section. The JCE framework includes facilities for using other provider implementations; however, Adobe cannot provide technical support for third-party security providers.

Java Aes Encryption Example

Example