⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sunjcecrypt.java

📁 Wicket一个开发Java Web应用程序框架。它使得开发web应用程序变得容易而轻松。 Wicket利用一个POJO data beans组件使得它可以与任何持久层技术相结合。
💻 JAVA
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.wicket.util.crypt;import java.security.GeneralSecurityException;import java.security.NoSuchAlgorithmException;import java.security.Provider;import java.security.Security;import java.security.spec.InvalidKeySpecException;import javax.crypto.Cipher;import javax.crypto.SecretKey;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.PBEKeySpec;import javax.crypto.spec.PBEParameterSpec;import org.apache.wicket.WicketRuntimeException;import org.apache.wicket.util.lang.Classes;/** * Provide some simple means to encrypt and decrypt strings such as passwords. The whole * implementation is based around Sun's security providers and uses the <a * href="http://www.semoa.org/docs/api/cdc/standard/pbe/PBEWithMD5AndDES.html">PBEWithMD5AndDES</a> * method to encrypt and decrypt the data. *  * @author Juergen Donnerstag */public class SunJceCrypt extends AbstractCrypt{	/**	 * Iteration count used in combination with the salt to create the encryption key.	 */	private final static int COUNT = 17;	/** Name of encryption method */	private static final String CRYPT_METHOD = "PBEWithMD5AndDES";	/** Salt */	private final static byte[] salt = { (byte)0x15, (byte)0x8c, (byte)0xa3, (byte)0x4a,			(byte)0x66, (byte)0x51, (byte)0x2a, (byte)0xbc };	/**	 * Constructor	 */	public SunJceCrypt()	{		if (Security.getProviders("Cipher." + CRYPT_METHOD).length > 0)		{			return; // we are good to go!		}		try		{			// Initialize and add a security provider required for encryption			final Class clazz = Classes.resolveClass("com.sun.crypto.provider.SunJCE");			Security.addProvider((Provider)clazz.newInstance());		}		catch (IllegalAccessException ex)		{			throw new WicketRuntimeException("Unable to load SunJCE service provider", ex);		}		catch (InstantiationException ex)		{			throw new WicketRuntimeException("Unable to load SunJCE service provider", ex);		}	}	/**	 * Crypts the given byte array	 * 	 * @param input	 *            byte array to be crypted	 * @param mode	 *            crypt mode	 * @return the input crypted. Null in case of an error	 * @throws GeneralSecurityException	 */	protected final byte[] crypt(final byte[] input, final int mode)			throws GeneralSecurityException	{		SecretKey key = generateSecretKey();		PBEParameterSpec spec = new PBEParameterSpec(salt, COUNT);		Cipher ciph = Cipher.getInstance(CRYPT_METHOD);		ciph.init(mode, key, spec);		return ciph.doFinal(input);	}	/**	 * Generate the de-/encryption key.	 * <p>	 * Note: if you don't provide your own encryption key, the implementation will use a default. Be	 * aware that this is potential security risk. Thus make sure you always provide your own one.	 * 	 * @return secretKey the security key generated	 * @throws NoSuchAlgorithmException	 *             unable to find encryption algorithm specified	 * @throws InvalidKeySpecException	 *             invalid encryption key	 */	private final SecretKey generateSecretKey() throws NoSuchAlgorithmException,			InvalidKeySpecException	{		final PBEKeySpec spec = new PBEKeySpec(getKey().toCharArray());		return SecretKeyFactory.getInstance(CRYPT_METHOD).generateSecret(spec);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -