public class DESUtil {
/**
- CFB
*/
public static final String CFB = “CFB”;
/**
- OFB
*/
public static final String OFB = “OFB”;
/**
- CBC
*/
public static final String CBC = “CBC”;
/**
- iv向量
*/
private static final byte[] DESIV = { (byte) 0xCE, (byte) 0x35, (byte) 0x5,
(byte) 0xD, (byte) 0x98, (byte) 0x91, (byte) 0x8, (byte) 0xA };
/**
- AlgorithmParameterSpec
*/
private static AlgorithmParameterSpec IV = null;
/**
- SHA1PRNG
*/
private static final String SHA1PRNG = “SHA1PRNG”;
/**
- DES默认模式
*/
private static final String DES = “DES”;
/**
- CBC加密模式
*/
private static final String DES_CBC_PKCS5PADDING = “DES/CBC/PKCS5Padding”;
/**
- OFB加密模式
*/
private static final String DES_OFB_PKCS5PADDING = “DES/OFB/PKCS5Padding”;
/**
- CFB加密模式
*/
private static final String DES_CFB_PKCS5_PADDING = “DES/CFB/PKCS5Padding”;
/**
- 加密模式
*/
private static final int ENCRYPT_MODE = 1;
/**
- 解密模式
*/
private static final int DECRYPT_MODE = 2;
/**
- 密钥
*/
private Key key;
public DESUtil(String str) {
getKey(str);
}
public Key getKey() {
return key;
}
public void setKey(Key key) {
this.key = key;
}
/**
-
通过密钥获得key
-
@param secretKey 密钥
-
@author sucb
-
@date 2017年2月28日下午1:17:58
*/
public void getKey(String secretKey) {
try {
SecureRandom secureRandom = SecureRandom.getInstance(SHA1PRNG);
secureRandom.setSeed(secretKey.getBytes());
KeyGenerator generator = null;
try {
generator = KeyGenerator.getInstance(DES);
} catch (NoSuchAlgorithmException e) {
}
generator.init(secureRandom);
IV = new IvParameterSpec(DESIV);
this.key = generator.generateKey();
generator = null;
} catch (Exception e) {
throw new RuntimeException("Error in getKey(String secretKey), Cause: " + e);
}
}
/**
-
字符串des加密
-
@param data 需要加密的字符串
-
@param encryptType 加密模式 (ECB/CBC/OFB/CFB)
-
@return 加密结果
-
@throws Exception 异常
-
@author sucb
-
@date 2017年3月2日下午7:47:37
*/
public String encrypt(String data, String encryptType) throws Exception {
Cipher cipher = getPattern(encryptType, ENCRYPT_MODE);
byte[] pasByte = cipher.doFinal(data.getBytes(“UTF-8”));
return Base64.encodeBase64String(pasByte);
}
/**
-
字符串des解密
-
@param data 需要解密的字符串
-
@param decryptType 解密模式 (ECB/CBC/OFB/CFB)
-
@return 解密结果
-
@throws Exception 异常
-
@author sucb
-
@date 2017年3月2日下午7:48:21
*/
public String decrypt(String data, String decryptType) throws Exception {
Cipher cipher = getPattern(decryptType, DECRYPT_MODE);
byte[] pasByte = cipher.doFinal(Base64.decodeBase64(data));
return new String(pasByte, “UTF-8”);
}
/**
-
初始化cipher
-
@param type 加密/解密模式 (ECB/CBC/OFB/CFB)
-
@param cipherMode cipher工作模式 1:加密; 2:解密
-
@return cipher
-
@throws Exception 异常
-
@author sucb
-
@date 2017年3月2日下午7:49:16
*/
private Cipher getPattern(String type, int cipherMode) throws Exception {
Cipher cipher;
switch (type){
case CBC :
cipher = Cipher.getInstance(DES_CBC_PKCS5PADDING);
cipher.init(cipherMode, key, IV);
break;
case OFB :
cipher = Cipher.getInstance(DES_OFB_PKCS5PADDING);
cipher.init(cipherMode, key, IV);
break;
case CFB :
cipher = Cipher.getInstance(DES_CFB_PKCS5_PADDING);
cipher.init(cipherMode, key, IV);
break;
default :
cipher = Cipher.getInstance(DES);
最后
权威指南-第一本Docker书
引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。
总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。
关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!
中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。
[外链图片转存中…(img-g46H8fIU-1714304246245)]
[外链图片转存中…(img-sPhW6s61-1714304246246)]
[外链图片转存中…(img-CsZXteXa-1714304246247)]
[外链图片转存中…(img-GV1r9DFZ-1714304246247)]
关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!