All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sviolet.thistle.util.crypto.DigestCipher Maven / Gradle / Ivy

/*
 * Copyright (C) 2015-2017 S.Violet
 *
 * 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.
 *
 * Project GitHub: https://github.com/shepherdviolet/thistle
 * Email: [email protected]
 */

package sviolet.thistle.util.crypto;

import sviolet.thistle.util.conversion.ByteUtils;
import sviolet.thistle.util.crypto.base.BaseDigestCipher;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

/**
 * [国际算法]摘要工具
 *
 * 

Cipher/Signature/MessageDigest线程不安全!!!

* * @author S.Violet */ public class DigestCipher { /** * 摘要类型:MD5 */ public static final String TYPE_MD5 = "MD5"; /** * 摘要类型:SHA1 */ public static final String TYPE_SHA1 = "SHA1"; /** * 摘要类型:SHA256 */ public static final String TYPE_SHA256 = "SHA-256"; /** * 摘要类型:SHA-512 */ public static final String TYPE_SHA512 = "SHA-512"; private static final String DEFAULT_ENCODING = "utf-8"; /** * 摘要byte[] * * @param bytes bytes * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digest(byte[] bytes,String type) { return BaseDigestCipher.digest(bytes, type); } /** * 摘要字符串(.getBytes("UTF-8")), 注意抛出异常 * * @param str 字符串 * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestStr(String str, String type){ return digestStr(str, type, DEFAULT_ENCODING); } /** * 摘要字符串(.getBytes(encoding)) * * @param str bytes * @param type 摘要算法 * @param encoding 编码方式 * @return 摘要bytes */ public static byte[] digestStr(String str, String type, String encoding){ if (str == null){ throw new NullPointerException("[DigestCipher]digestStr: str is null"); } try { return BaseDigestCipher.digest(str.getBytes(encoding), type); } catch (UnsupportedEncodingException e) { throw new RuntimeException("[DigestCipher]Unsupported Encoding:" + encoding, e); } } /** * 摘要十六进制字符串(ByteUtils.hexToBytes(hexStr)) * * @param hexStr 十六进制字符串 * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestHexStr(String hexStr, String type){ if (hexStr == null){ throw new NullPointerException("[DigestCipher]digestHexStr: hexStr is null"); } return BaseDigestCipher.digest(ByteUtils.hexToBytes(hexStr), type); } /** * 摘要输入流, 处理完毕会关闭流 * @param inputStream 输入流(处理完毕会关闭流) * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestInputStream(InputStream inputStream, String type) throws IOException { return BaseDigestCipher.digestInputStream(inputStream, type); } /** * 摘要文件, 根据运行时环境选择使用NIO或IO方式 * @param file 文件 * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestFile(File file, String type) throws IOException { return BaseDigestCipher.digestFile(file, type); } /** * 摘要文件NIO方式, 较快
* * 注意:非安卓平台使用该方法前, 请使用FileUtils.isMappedByteBufferCanClean()判断MappedByteBuffer是否能被手动回收, * 如果isMappedByteBufferCanClean返回false, 建议使用digestFileIo, 否则操作后, 文件将在一段时间内无法被读写删除
* * 注意:安卓平台API11以上使用, API10以下会很慢
* * @param file 文件 * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestFileNio(File file, String type) throws IOException { return BaseDigestCipher.digestFileNio(file, type); } /** * 摘要文件普通方式, 阻塞较慢 * * @param file 文件 * @param type 摘要算法 * @return 摘要bytes */ public static byte[] digestFileIo(File file, String type) throws IOException { return BaseDigestCipher.digestFileIo(file, type); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy