1、
严格地说,应该说是属于编码格式,而非加密算法。
加解密:
/**
* 加密
*/
(byte[] data) {
= new ();
.(data);
}
/**
* 解密
*/
byte[] ( ) {
= new ();
byte[] bytes = null;
try {
bytes = .();
} catch ( e) {
e.();
}
bytes;
}
2、MD5和SHA
MD5( 5,信息摘要算法),常用于文件校验。
SHA( Hash ,安全散列算法),同样属于非可逆的算法,作用与MD5相类似。
MD5输出是128位的,SHA输出是160位的。SHA相较于MD5而言更加安全,当然加密花费时间也更长一点。
先设置常量
final = "SHA";
final = "MD5";
加密
/**
* MD5加密
*/
(byte[] data) {
= null;
try {
md5 = .();
md5.(data);
= (md5.());
} catch (tion e) {
e.();
}
;
}
/**
* SHA加密
*/
(byte[] data) {
= null;
try {
sha = .();
sha.(data);
= (sha.());
} catch (tion e) {
e.();
}
;
}
3、RSA
RSA算法是一种非对称密码算法。详情见RSA算法
设置需要用到常量,为密钥的初始化长度,密钥的长度越长,安全性就越好,但是加密解密所用的时间就会越多。一次能加密的密文长度为:密钥的长度/8-11。所以长度的密钥一次可以加密的密文为1024/8-11=。所以非对称加密一般都用于加密对称加密算法的密钥,而不是直接加密内容。对于小文件可以使用RSA加密,但加密过程仍可能会使用分段加密。
final = "RSA";
final int = 1024;
3.1、java中初始化生成公钥和私钥
/**
* 初始化
*/
[] () {
[] keys = null;
try {
= .();
.();
= .();
// 公钥
= () .();
// 私钥
= () .();
keys = new []{(.()), (.())};
} catch (tion e) {
e.();
}
keys;
}
3.2、加解密
RSA有两个密钥,所以加解密方式也有两种,一种是“私钥加密-公钥解密”,另一种就是“公钥加密-私钥解密”,加解密的实现如下:
/**
* 私钥加密
*/
byte[] (byte[] data, key) {
try {
byte[] = (key);
// 获得私钥
= new ();
= .();
Key = .();
// 对数据加密
= .(.());
.init(., );
.(data);
} catch ( e) {
e.();
}
null;
}
/**
* 公钥解密
*/
byte[] (byte[] data, key) {
try {
// 对私钥解密
byte[] = (key);
= new ();
= .();
Key = .();
// 对数据解密
= .(.());
.init(., );
.(data);
} catch ( e) {
e.();
}
null;
}
/**
* 公钥加密
*/
byte[] (byte[] data, key) {
try {
// 对公钥解密
byte[] = (key);
// 取公钥
= new ();
= .();
Key = .();
// 对数据解密
= .(.());
.init(., );
.(data);
} catch ( e) {
e.();
}
null;
}
/**
* 私钥解密
*/
byte[] (byte[] data, key) {
try {
// 对私钥解密
byte[] = (key);
= new ();
= .();
Key = .();
// 对数据解密
= .(.());
.init(., );
.(data);
} catch ( e) {
e.();
}
null;
}
3.3 签名验证
使用RSA进行签名验证。数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息java简单加密解密算法java简单加密解密算法,然后用对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。
该方法可行有两个的条件:
1、通过公钥推算出私钥的做法不可能实现
2、即使传输数据的过程被拦截java简单加密解密算法 java 加解密算法_Java常用加解密算法,因为拦截者没有私钥,改动数据就会导致签名的不一致。(这里需要注意,拦截者还是可以使用公钥对数据进行解密,看到传输的数据的)
定义常量
final = "";
签名和签名验证
/**
* 私钥签名
*/
(byte[] data, ) {
try {
// 解密私钥
byte[] = ();
// 构造对象
= new ();
// 指定加密算法
= .();
// 取私钥匙对象
= .();
// 用私钥对信息生成数字签名
= .();
.();
.(data);
(.sign());
} catch ( e) {
e.();
}
null;
}
/**
* 公钥验证
*/
(byte[] data, , sign) {
try {
// 解密公钥
byte[] = ();
// 构造对象
= new ();
// 指定加密算法
= .();
// 取公钥匙对象
= .();
= .();
.();
.(data);
// 验证签名是否正常
.((sign));
} catch ( e) {
e.();
}
false;
}
4、DES
DES(全称为 ,即数据加密标准),是一种对称加密算法!
定义常量
final = "DES";
加解密,其中key是8位的密码
/**
* 加密
*/
byte[] (byte[] data, key) {
try {
= new ();
= new (key.());
= .();
= .();
= .();
.init(., , );
.(data);
} catch ( e) {
e.();
}
null;
}
/**
* 解密
*/
byte[] (byte[] data, key) {
try {
= new ();
= new (key.());
= .();
= .();
= .();
.init(., , );
.(data);
} catch ( e) {
e.();
}
null;
}
文章来源:https://blog.csdn.net/weixin_35725138/article/details/114451581