com.izforge.izpack.util.PasswordEncryptionValidator Maven / Gradle / Ivy
/*
* IzPack - Copyright 2001-2008 Julien Ponge, All Rights Reserved.
*
* http://izpack.org/
* http://developer.berlios.de/projects/izpack/
*
* Copyright 2008 Jeff Gordon
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.izforge.izpack.util;
import com.izforge.izpack.panels.PasswordGroup;
import com.izforge.izpack.panels.ProcessingClient;
import com.izforge.izpack.panels.Validator;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Map;
/**
* @author Jeff Gordon
*/
public class PasswordEncryptionValidator implements Validator
{
private Cipher encryptCipher;
public boolean validate(ProcessingClient client)
{
boolean returnValue = true;
String encryptedPassword = null;
String key = null;
String algorithm = null;
Map params = getParams(client);
try
{
key = (String) params.get("encryptionKey");
algorithm = (String) params.get("algorithm");
if (key != null && algorithm != null)
{
initialize(key, algorithm);
encryptedPassword = encryptString(client.getFieldContents(0));
if (encryptedPassword != null)
{
PasswordGroup group = (PasswordGroup) client;
group.setModifiedPassword(encryptedPassword);
}
else
{
returnValue = false;
}
}
}
catch (Exception e)
{
Debug.trace("Password Encryption Failed: " + e);
returnValue = false;
}
return (returnValue);
}
private Map getParams(ProcessingClient client)
{
PasswordGroup group = null;
Map params = null;
try
{
group = (PasswordGroup) client;
if (group.hasParams())
{
params = group.getValidatorParams();
}
}
catch (Exception e)
{
Debug.trace("getParams() Failed: " + e);
}
return (params);
}
private void initialize(String key, String algorithm) throws Exception
{
try
{
//Generate the key bytes
KeyGenerator keygen = KeyGenerator.getInstance(algorithm);
keygen.init(new SecureRandom(key.getBytes()));
byte[] keyBytes = keygen.generateKey().getEncoded();
SecretKeySpec specKey = new SecretKeySpec(keyBytes, algorithm);
//Initialize the encryption cipher
encryptCipher = Cipher.getInstance(algorithm);
encryptCipher.init(Cipher.ENCRYPT_MODE, specKey);
}
catch (Exception e)
{
Debug.trace("Error initializing password encryption " + e.getMessage());
throw e;
}
}
public String encryptString(String string) throws Exception
{
String result = null;
try
{
byte[] cryptedbytes = null;
cryptedbytes = encryptCipher.doFinal(string.getBytes("UTF-8"));
result = (new BASE64Encoder()).encode(cryptedbytes);
}
catch (Exception e)
{
Debug.trace("Error encrypting string: " + e.getMessage());
throw e;
}
return result;
}
}