更多知识 学习:https://www.processon.com/view/60504b5ff346fb348a93b4fa#map
目录:
DES算法是一种对称加密算法,使用相同的密钥进行加密和解密。其基本的加密和解密流程如下:
DES算法的加密和解密流程都是基于置换、代替和异或运算,通过多轮迭代来实现加密和解密的过程。由于DES算法使用的密钥长度较短,因此存在被暴力破解的风险,需要注意密钥的安全性。
总之,DES算法是一种安全性高、加密速度快、应用广泛的对称加密算法,具有很多优点,适合于对数据进行保护和加密。
总之,DES算法可以用于各种需要数据保密的场景中,但是由于DES算法的安全性已经受到了很大的威胁,现在一般不再使用DES算法,而是使用更加安全的加密算法,如AES算法。
import java.security.Key;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
public class DESUtil {
private static Key key;
private static String KEY_STR = "myKey";
private static String CHARSETNAME = "UTF-8";
private static String ALGORITHM = "DES";
static {
try {
KeyGenerator generator = KeyGenerator.getInstance(ALGORITHM);
generator.init(new SecureRandom(KEY_STR.getBytes()));
key = generator.generateKey();
generator = null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String encrypt(String str) {
try {
byte[] bytes = str.getBytes(CHARSETNAME);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(bytes);
return byte2String(doFinal);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static String decrypt(String str) {
try {
byte[] bytes = string2Byte(str);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] doFinal = cipher.doFinal(bytes);
return new String(doFinal, CHARSETNAME);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static String byte2String(byte[] bytes) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < bytes.length; i++) {
byte b = bytes[i];
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hex = "0" + hex;
}
stringBuilder.append(hex.toUpperCase());
}
return stringBuilder.toString();
}
private static byte[] string2Byte(String str) {
byte[] bytes = new byte[str.length() / 2];
for (int i = 0; i < bytes.length; i++) {
String subStr = str.substring(i * 2, i * 2 + 2);
bytes[i] = (byte) Integer.parseInt(subStr, 16);
}
return bytes;
}
}
Vue前端代码:
html
<template>
<div>
<input type="text" v-model="username" placeholder="请输入用户名" />
<input type="password" v-model="password" placeholder="请输入密码" />
<button @click="login">登录</button>
</div>
</template>
<script>
import axios from "axios";
import { encrypt } from "@/utils/des";
export default {
data() {
return {
username: "",
password: "",
};
},
methods: {
login() {
let params = {
username: this.username,
password: encrypt(this.password),
};
axios.post("/api/login", params).then((res) => {
if (res.data.code === 0) {
alert("登录成功");
} else {
alert("登录失败");
}
});
},
},
};
</script>
在Vue中使用了一个名为 encrypt
的函数,该函数通过调用Java后端的 DESUtil.encrypt
方法实现了对密码的加密。需要注意的是,前后端的密钥需要保持一致,这里使用的是 myKey
。
同时,需要在后端的接口中对加密后的密码进行解密,代码如下:
@RequestMapping(value = "/login", method = RequestMethod.POST)
@ResponseBody
public Result login(@RequestBody User user) {
String password = DESUtil.decrypt(user.getPassword());
User loginUser = userService.login(user.getUsername(), password);
if (loginUser != null) {
return Result.success();
} else {
return Result.failure();
}
}
在这个例子中,我们使用DES算法对用户密码进行了加密,确保了用户密码在传输过程中的安全性。同时,我们还需要注意保护密钥的安全性,防止密钥被泄露。
DES算法是一种经典的对称加密算法,它采用相同的密钥来进行加密和解密,具有安全性高、简单易用和适用性广等优点。DES算法的加密过程包括初始置换、16轮加密和末置换三个步骤,解密过程则是加密过程的逆过程。由于DES算法的密钥长度只有56位,因此存在被暴力破解的风险,安全性相对较低。
在实际应用中,需要综合考虑安全性、性能和密钥管理等因素,以确保数据的安全和可靠性。为了提高DES算法的安全性,可以采用多重DES加密方式,即对同一数据进行两次或三次DES加密,使用不同的密钥进行加密,以增加破解难度。此外,还可以采用更长的密钥长度,如3DES算法采用的密钥长度为168位,相比之下,DES算法的密钥长度显得较为脆弱。在实际应用中,还需要对密钥进行安全存储和管理,以防止密钥被泄露或攻击者获取。同时,还需要综合考虑性能和安全性的平衡,选择最适合的加密算法和加密方式,以保障数据的安全和可靠性。