package com.zt.life.modules.mainPart.test.controller;
|
|
import cn.hutool.core.io.IoUtil;
|
import com.zt.core.oss.encry.IOssEncryptService;
|
import org.springframework.web.bind.annotation.*;
|
import sun.misc.BASE64Decoder;
|
import sun.misc.BASE64Encoder;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.KeyGenerator;
|
import java.io.File;
|
import java.io.InputStream;
|
import java.security.Key;
|
import java.security.SecureRandom;
|
|
@RestController
|
@RequestMapping("sys/OssDecryptFile")
|
public class OssDecryptFileControl implements IOssEncryptService {
|
|
// optional value AES/DES/DESede
|
public static String DES = "AES";
|
// optional value AES/DES/DESede
|
public static String CIPHER_ALGORITHM = "AES";
|
|
private static String KEY = "zhpt-key#%W";
|
|
@Override
|
public InputStream encrypt(InputStream inputStream) {
|
try {
|
return encrypt(inputStream, KEY);
|
} catch (Exception e) {
|
return inputStream;
|
}
|
}
|
|
@Override
|
public InputStream decrypt(File file) {
|
try {
|
return decrypt(file, KEY);
|
} catch (Exception e) {
|
return IoUtil.toStream(file);
|
}
|
}
|
|
|
public static Key getKey(String strKey) {
|
try {
|
if (strKey == null) {
|
strKey = "";
|
}
|
KeyGenerator _generator = KeyGenerator.getInstance("AES");
|
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
|
secureRandom.setSeed(strKey.getBytes());
|
_generator.init(128, secureRandom);
|
return _generator.generateKey();
|
} catch (Exception e) {
|
throw new RuntimeException(" 密钥出现异常 ");
|
}
|
}
|
|
public static InputStream encrypt(InputStream inputStream, String key) throws Exception {
|
SecureRandom sr = new SecureRandom();
|
Key secureKey = getKey(key);
|
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
|
cipher.init(Cipher.ENCRYPT_MODE, secureKey, sr);
|
byte[] bt = cipher.doFinal(IoUtil.readBytes(inputStream));
|
String strS = new BASE64Encoder().encode(bt);
|
return IoUtil.toStream(strS.getBytes());
|
}
|
|
|
public static InputStream decrypt(File file, String key) throws Exception {
|
SecureRandom sr = new SecureRandom();
|
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
|
Key secureKey = getKey(key);
|
cipher.init(Cipher.DECRYPT_MODE, secureKey, sr);
|
byte[] res = new BASE64Decoder().decodeBuffer(IoUtil.toStream(file));
|
res = cipher.doFinal(res);
|
|
return IoUtil.toStream(res);
|
}
|
}
|