签名加密_Java_hutool(01代码实现)
本⽂档不讲解签名/加密相关的理论知识, 仅列出通过Java实现的⽅式.
对称加密
加解密使⽤的是同⼀个秘钥
基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。本⽂只介绍最常⽤的对称加密算法DES、3DES(TripleDES)和AES。
⾮对称加密
加解密使⽤的是不同的秘钥
基于“⾮对称密钥”的加密算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
使⽤最⼴泛的是RSA算法,Elgamal是另⼀种常⽤的⾮对称加密算法。
使⽤场景
在互联⽹后端技术中⾮对称加密技术主要⽤于登录、数字签名、数字证书认证等场景。
疑问: 既然堆成加密存在安全问题, 为什么还使⽤对称加密呢? ( 我同事告诉我, 当前功能不开放到外⽹, 使⽤对称加密即可 )
使⽤到的依赖包hutool
<!-- mvnrepository/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.6.1</version>
</dependency>
AES对称加密/解密
public String encryptAES(String data, String key) throws Exception {
//⽣成⼀个随机秘钥
//byte[] keyRandom = ateKey(Value()).getEncoded();
//将秘钥转为Base64
//String keyRandomEncode = de(keyRandom);
key = "EC/Z+S7c3EFJa2dtvLyekg==";
//将Base64编码的秘钥的格式进⾏解码转换
byte[] keyByte = Base64.decode(key);
//加密
AES aes = SecureUtil.aes(keyByte); //构建
byte[] encryptData = pt(data); //加密
//加密后的数据转为Base64
String encryptDataEncode = de(encryptData);
//将Base64编码加密数据和秘钥的格式进⾏解码转换
byte[] data2 = Base64.decode(encryptDataEncode);
byte[] key2 = Base64.decode(key);
//解密
AES aes2 = SecureUtil.aes(key2);
byte[] decrypt = aes.decrypt(data2);
return "秘钥: "+ key + ", 加密后的数据: "+ encryptDataEncode + ", 解密后的数据: "+ new String (decrypt);
}
其他
签名字符串是什么@Override public String dataSign(MsgForm msgForm) throws Exception {
String ywData = Data();
String prikeyYlf = PrivateKey();
Sign sign = new Sign(SignAlgorithm.SHA1withRSA, prikeyYlf, null);
byte[] encrypt = sign.sign(StrUtil.bytes(ywData, CharsetUtil.CHARSET_UTF_8));
de(encrypt);
}
@Override public boolean verifySign(MsgForm msgForm) throws Exception {
String ywData = Data();
String signData = SignData();
String publicKey = PublicKey();
Sign sign = new Sign(SignAlgorithm.SHA1withRSA, null, publicKey);
boolean encrypt = sign.verify(StrUtil.bytes(ywData), Base64.decode(signData));
//de(encrypt);
return encrypt;
}
@Override public String encrypt(MsgForm msgForm) throws Exception {
RSA rsa = new RSA(null, PublicKey());
byte[] encrypt = pt(StrUtil.Data(), CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
de(encrypt);
}
@Override public String decrypt(MsgForm msgForm) throws Exception {
RSA rsa = new PrivateKey(), null);
byte[] decrypt = rsa.decrypt(Base64.Data()), KeyType.PrivateKey);
de(decrypt);
}
@Override public void dataReceive(MsgForm msgForm) throws Exception {
SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmsszzz");
StringBuffer filePath = new Property("download.path"));
filePath.append("99_");
filePath.BusiCode()+"_"); //业务类型(6)
filePath.append(ft.format(new Date())+"_"); //yyyyMMddhhmisszzz(17)
filePath.append(new Random().nextInt(10)); //2位随机数
filePath.append(new Random().nextInt(10));
filePath.append(".XML"); //.XML
//将数据写⼊到filePath
FileWriter fw = new String(),"UTF-8");
byte[] pdfData = Base64.Data());
fw.write(pdfData,0,pdfData.length);
}
@Override public String encryptAES(String data, String key) throws Exception {
//⽣成⼀个随机秘钥
//byte[] kkkkRandom = ateKey(Value()).getEncoded();
/
/将秘钥转为Base64
//key = de(kkkkRandom);
//key = "7Df05RgSzVm8/wWzUeTDaA==";
//将Base64编码的秘钥的格式进⾏解码转换
byte[] keyByte = Base64.decode(key);
//加密
AES aes = SecureUtil.aes(keyByte); //构建
byte[] encryptData = pt(data); //加密
//加密后的数据转为Base64
de(encryptData);
}
@Override public String decryptAES(String data, String key) throws Exception {
//key = "7Df05RgSzVm8/wWzUeTDaA==";
//将Base64编码加密数据和秘钥的格式进⾏解码转换
byte[] dataByte = Base64.decode(data);
byte[] keyByte = Base64.decode(key);
//解密
AES aes = SecureUtil.aes(keyByte); //构建
byte[] decrypt = aes.decrypt(dataByte); //加密
return new String (decrypt); //转换为字符串返回
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论