/* * Copyright (C) 2013 The Java Tool project * Gelin Luo <greenlaw110(at)gmail.com> * * 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.osgl.util; import org.osgl.exception.UnexpectedException; import javax.xml.bind.DatatypeConverter; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.Charset; import java.security.MessageDigest; import java.util.UUID; /** * Utility class for encoding and decoding * <p>Part of the code comes from play!framework under apache license</p> */ public class Codec { /** * @return an UUID String */ public static String UUID() { return UUID.randomUUID().toString(); } /** * Alias of {@link #UUID()} * @return an UUID string */ public static String uuid() { return UUID(); } /** * Encode a String to base64 * * @param value The plain String * @return The base64 encoded String * @deprecated Use {@link #encodeBase64(String)} instead */ @Deprecated public static String encodeBASE64(String value) { return new String(Base64.encode(value.getBytes(Charsets.UTF_8))); } /** * Encode a String to base64 * * @param value The plain String * @return The base64 encoded String */ public static String encodeBase64(String value) { return new String(Base64.encode(value.getBytes(Charsets.UTF_8))); } /** * Encode a String to base64 using variant URL safe encode scheme * @param value the plain string * @return the base64 encoded String that is URL safe */ public static String encodeUrlSafeBase64(String value) { return new String(UrlSafeBase64.encode(value.getBytes(Charsets.UTF_8))); } /** * Encode binary data to base64 * * @param value The binary data * @return The base64 encoded String * @deprecated Use {@link #encodeBase64(byte[])} instead */ @Deprecated public static String encodeBASE64(byte[] value) { return encodeBase64(value); } /** * Encode binary data to base64 * * @param value The binary data * @return The base64 encoded String */ public static String encodeBase64(byte[] value) { return new String(Base64.encode(value)); } /** * Encode binary data to base64 use Url safe variant * * @param value The binary data * @return The base64 encoded String that is URL safe */ public static String encodeUrlSafeBase64(byte[] value) { return new String(UrlSafeBase64.encode(value)); } /** * Decode a base64 value * * @param value The base64 encoded String * @return decoded binary data * @deprecated Use {@link #decodeBase64(String)} instead */ @Deprecated public static byte[] decodeBASE64(String value) { return Base64.decode(value); } /** * Decode a base64 value * * @param value The base64 encoded String * @return decoded binary data */ public static byte[] decodeBase64(String value) { return Base64.decode(value); } /** * Decode a URL safe base64 value * * @param value The base64 encoded String that is encoded using {@link #encodeUrlSafeBase64(String)} * @return decoded binary data */ public static byte[] decodeUrlSafeBase64(String value) { return UrlSafeBase64.decode(value); } /** * Build an hexadecimal MD5 hash for a String * * @param value The String to hash * @return An hexadecimal Hash */ public static String hexMD5(String value) { try { MessageDigest messageDigest = MessageDigest.getInstance("MD5"); messageDigest.reset(); messageDigest.update(value.getBytes("utf-8")); byte[] digest = messageDigest.digest(); return byteToHexString(digest); } catch (Exception ex) { throw new UnexpectedException(ex); } } /** * Build an hexadecimal SHA1 hash for a String * * @param value The String to hash * @return An hexadecimal Hash */ public static String hexSHA1(String value) { try { MessageDigest md; md = MessageDigest.getInstance("SHA-1"); md.update(value.getBytes("utf-8")); byte[] digest = md.digest(); return byteToHexString(digest); } catch (Exception ex) { throw new UnexpectedException(ex); } } /** * Write a byte array as hexadecimal String. * @return bytes */ public static String byteToHexString(byte[] bytes) { return DatatypeConverter.printHexBinary(bytes); } /** * Transform an hexadecimal String to a byte array. * @param hexString the string * @return the byte array of the hex string */ public static byte[] hexStringToByte(String hexString) { return DatatypeConverter.parseHexBinary(hexString); } public static String encodeUrl(String s, Charset enc) { try { return URLEncoder.encode(s, enc.name()); } catch (UnsupportedEncodingException e) { throw E.encodingException(e); } } public static String encodeUrl(String s) { try { return URLEncoder.encode(s, "utf-8"); } catch (UnsupportedEncodingException e) { throw E.encodingException(e); } } public static String decodeUrl(String s, Charset enc) { try { return URLDecoder.decode(s, enc.name()); } catch (UnsupportedEncodingException e) { throw E.encodingException(e); } } public static String decodeUrl(String s) { try { return URLDecoder.decode(s, "utf-8"); } catch (UnsupportedEncodingException e) { throw E.encodingException(e); } } }