|
Javaメモ > 共通鍵方式による暗号化/復号化(Java) 共通鍵方式による暗号化/復号化(Java) †【関連】 共通鍵方式による暗号化/復号化 †import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class MyCrypt {
public static final String cryptType = "AES";
//public static final String cryptType = "Blowfish";
/**
* @param args
*/
public static void main(String[] args) {
String key = "a1b2c3d4";
String text = "N12345678";
String encryptedText = encrypt(key, text, "UTF-8");
System.out.println(encryptedText);
String decryptedText = decrypt(key, encryptedText, "UTF-8");
System.out.println(decryptedText);
}
/**
* バイト配列を暗号化する。<br />
* @param secretkey 暗号化キー
* @param data バイトデータ
* @return 暗号化されたバイトデータ
*/
public static byte[] encrypt(String secretkey, byte[] data) {
SecretKeySpec key;
byte[] bytes = new byte[128 / 8];
byte[] keys = null;
try {
keys = secretkey.getBytes("UTF-8");
for (int i = 0; i < secretkey.length(); i++) {
if (i >= bytes.length)
break;
bytes[i] = keys[i];
}
key = new SecretKeySpec(bytes, cryptType);
byte[] de = null;
Cipher cipher = Cipher.getInstance(cryptType);
cipher.init(Cipher.ENCRYPT_MODE, key);
de = cipher.doFinal(data);
byte[] encData = Base64.encodeBase64(de);
return encData;
} catch (Exception e1) {
e1.printStackTrace();
}
return null;
}
/**
* バイト配列を復号化する。<br />
* @param secretkey 暗号化キー
* @param data バイトデータ
* @return 復号化されたバイトデータ
*/
public static byte[] decrypt(String secretkey, byte[] data) {
try {
byte[] bytes = new byte[128 / 8];
byte[] keys = secretkey.getBytes("UTF-8");
for (int i = 0; i < secretkey.length(); i++) {
if (i >= bytes.length)
break;
bytes[i] = keys[i];
}
javax.crypto.spec.SecretKeySpec sksSpec = new SecretKeySpec(bytes, cryptType);
javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance(cryptType);
cipher.init(javax.crypto.Cipher.DECRYPT_MODE, sksSpec);
byte[] decrypted = cipher.doFinal(Base64.decodeBase64(data));
return decrypted;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 文字列を暗号化する。<br />
* @param secretkey 暗号化キー
* @param text 文字列
* @return 復号化された文字列
* @throws UnsupportedEncodingException
*/
public static String encrypt(String secretkey, String text, String encode) throws UnsupportedEncodingException {
byte[] encBytes = encrypt(secretkey, text.getBytes(encode));
String encrypted = new String(encBytes, encode);
return encrypted;
}
/**
* 文字列を復号化する。<br />
* @param secretkey 暗号化キー
* @param encryptedText 暗号化文字列
* @return 復号化された文字列
* @throws UnsupportedEncodingException
* @throws UnsupportedEncodingException
*/
public static String decrypt(String secretkey, String encryptedText, String encode)
throws UnsupportedEncodingException {
byte[] decBytes = decrypt(secretkey, encryptedText.getBytes(encode));
return new String(decBytes, encode);
}
}
|