| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- /*
- * Copyright 2019-2020 Zheng Jie
- *
- * 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 me.zhengjie.utils;
- import javax.crypto.Cipher;
- import javax.crypto.SecretKey;
- import javax.crypto.SecretKeyFactory;
- import javax.crypto.spec.DESKeySpec;
- import javax.crypto.spec.IvParameterSpec;
- import java.nio.charset.StandardCharsets;
- /**
- * 加密
- * @author Zheng Jie
- * @date 2018-11-23
- */
- public class EncryptUtils {
- private static final String STR_PARAM = "Passw0rd";
- private static Cipher cipher;
- private static final IvParameterSpec IV = new IvParameterSpec(STR_PARAM.getBytes(StandardCharsets.UTF_8));
- private static DESKeySpec getDesKeySpec(String source) throws Exception {
- if (source == null || source.length() == 0){
- return null;
- }
- cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
- String strKey = "Passw0rd";
- return new DESKeySpec(strKey.getBytes(StandardCharsets.UTF_8));
- }
- /**
- * 对称加密
- */
- public static String desEncrypt(String source) throws Exception {
- DESKeySpec desKeySpec = getDesKeySpec(source);
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
- SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
- cipher.init(Cipher.ENCRYPT_MODE, secretKey, IV);
- return byte2hex(
- cipher.doFinal(source.getBytes(StandardCharsets.UTF_8))).toUpperCase();
- }
- /**
- * 对称解密
- */
- public static String desDecrypt(String source) throws Exception {
- byte[] src = hex2byte(source.getBytes(StandardCharsets.UTF_8));
- DESKeySpec desKeySpec = getDesKeySpec(source);
- SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
- SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
- cipher.init(Cipher.DECRYPT_MODE, secretKey, IV);
- byte[] retByte = cipher.doFinal(src);
- return new String(retByte);
- }
- private static String byte2hex(byte[] inStr) {
- String stmp;
- StringBuilder out = new StringBuilder(inStr.length * 2);
- for (byte b : inStr) {
- stmp = Integer.toHexString(b & 0xFF);
- if (stmp.length() == 1) {
- // 如果是0至F的单位字符串,则添加0
- out.append("0").append(stmp);
- } else {
- out.append(stmp);
- }
- }
- return out.toString();
- }
- private static byte[] hex2byte(byte[] b) {
- int size = 2;
- if ((b.length % size) != 0){
- throw new IllegalArgumentException("长度不是偶数");
- }
- byte[] b2 = new byte[b.length / 2];
- for (int n = 0; n < b.length; n += size) {
- String item = new String(b, n, 2);
- b2[n / 2] = (byte) Integer.parseInt(item, 16);
- }
- return b2;
- }
- }
|