/* * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * 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 scouter.util; import scouter.io.DataInputX; import scouter.io.DataOutputX; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESKeySpec; import java.security.GeneralSecurityException; import java.security.Key; import java.security.MessageDigest; public class CipherUtil { public static String md5(String plainText) { String md5Text = null; if (plainText != null) { try { byte[] byteArray = plainText.getBytes(); MessageDigest md5 = MessageDigest.getInstance("MD5"); md5.update(byteArray); byte[] md5Bytes = md5.digest(); StringBuffer buf = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++) { if ((md5Bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString(md5Bytes[i] & 0xff, 16)); } md5Text = buf.toString(); } catch (Throwable t) { return plainText; } } return md5Text; } public static String sha256(String plainText) { String salt = "qwertyuiop!@#$%^&*()zxcvbnm,."; String sha256Text = null; if (plainText != null) { try { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); sha256.update(salt.getBytes()); byte[] byteArray = plainText.getBytes(); byte[] sha256Bytes = sha256.digest(byteArray); StringBuffer buf = new StringBuffer(); for (int i = 0; i < sha256Bytes.length; i++) { if ((sha256Bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString(sha256Bytes[i] & 0xff, 16)); } sha256Text = buf.toString(); } catch (Throwable t) { return plainText; } } return sha256Text; } private static Key genKey() throws GeneralSecurityException { String nm = CipherUtil.class.getSimpleName(); byte[] host = (nm + "012345678").getBytes(); byte[] key = new byte[8]; System.arraycopy(host, 0, key, 0, 8); return SecretKeyFactory.getInstance("DES") // .generateSecret(new DESKeySpec(key)); } public static String decode(String encoded) { try { Key key = genKey(); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] cyper = Base64.decode(encoded); byte[] decoded = cipher.doFinal(cyper); return new DataInputX(decoded).readText(); } catch (Exception e) { e.printStackTrace(); } return null; } public static String encode(String plain) { try { Key key = genKey(); Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] plainBytes = padding(new DataOutputX().writeText(plain).toByteArray()); byte[] encoded = cipher.doFinal(plainBytes); return Base64.encode(encoded); } catch (Exception e) { e.printStackTrace(); } return null; } private static byte[] padding(byte[] src) { int destlen = (src.length / 8 + 1) * 8; byte[] dest = new byte[destlen]; System.arraycopy(src, 0, dest, 0, src.length); return dest; } public static String sha2562(String plainText) { String salt = "qwertyuiop!@#$%^&*()zxcvbnm,."; String sha256Text = null; if (plainText != null) { try { String saltText = salt != null && !"".equals(salt)?plainText + "{" + salt.toString() + "}":plainText; MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] byteArray = saltText.getBytes(); byte[] sha256Bytes = sha256.digest(byteArray); StringBuffer buf = new StringBuffer(); for (int i = 0; i < sha256Bytes.length; i++) { if ((sha256Bytes[i] & 0xff) < 0x10) { buf.append("0"); } buf.append(Long.toString(sha256Bytes[i] & 0xff, 16)); } sha256Text = buf.toString(); } catch (Throwable t) { return plainText; } } return sha256Text; } public static void main(String[] args) { String pwd = "admin"; String md5 = md5(pwd); String cnd = encode(pwd); String rtn = decode(cnd); String sha256 = sha256(pwd); String sha2562 = sha2562(pwd); System.out.println("'" + pwd + "'"); System.out.println("'" + md5 + "'"); System.out.println("'" + cnd + "'"); System.out.println("'" + rtn + "'"); System.out.println("'" + sha256 + "'"); System.out.println("'" + sha2562 + "'"); } }