用MVC模式进行后端管理员RSA加密登录
时间: 2023-05-28 20:01:38 浏览: 57
MVC模式是一种软件开发架构,将应用程序分成三个独立的部分:模型(Model)、视图(View)和控制器(Controller)。在后端管理员RSA加密登录中,MVC模式可以如下应用:
1. 模型(Model):模型部分负责处理数据逻辑,包括加密算法、数据库读写等。在后端管理员RSA加密登录中,模型可以包含一个RSA加密算法的实现,接受前端提交的用户名和密码,并使用RSA加密算法对密码进行加密。模型还可以包含一个数据库读写的接口,用于将加密后的密码与用户信息比对,判断用户是否能够登录。
2. 视图(View):视图部分负责呈现用户界面。在后端管理员RSA加密登录中,视图可以为管理员提供一个包含用户名和密码的表单,用于输入登录信息。视图也可以为管理员呈现一个登录成功或失败的提示信息。
3. 控制器(Controller):控制器部分负责处理用户输入和应用程序逻辑。在后端管理员RSA加密登录中,控制器可以接收前端提交的用户名和密码信息,并将其传递给模型进行加密处理。控制器还可以根据模型返回的数据判断用户是否登录成功,并向视图返回相应的信息,用于呈现给管理员。
使用MVC模式可以将应用程序的不同部分分离开来,使得开发更加灵活和可维护。此外,MVC模式可以使代码结构更加清晰,降低系统开发和维护的成本。
相关问题
用MVC模式进行后端管理员RSA加密登录具体代码实现
这里提供一个示例代码实现,使用Java语言和Spring框架:
1. Model层
管理员信息模型类Admin:
```java
public class Admin {
private Integer id;
private String username;
private String password;
// 省略getter和setter方法...
}
```
2. View层
管理员登录的控制器AdminLoginController:
```java
@Controller
@RequestMapping("/admin")
public class AdminLoginController {
@Autowired
private AdminService adminService;
@GetMapping("/login")
public String loginPage() {
return "admin/login";
}
@PostMapping("/login")
@ResponseBody
public ResultVO login(@RequestParam("username") String username,
@RequestParam("password") String password,
HttpSession session) {
Admin admin = adminService.findByUsername(username);
if (admin == null) {
return ResultVO.fail("用户名不存在!");
}
// 对密码进行RSA加密
String encryptedPassword = RSAUtil.encrypt(password, admin.getPublicKey());
if (!admin.getPassword().equals(encryptedPassword)) {
return ResultVO.fail("密码错误!");
}
// 登录成功,将管理员信息存入Session
session.setAttribute("admin", admin);
return ResultVO.success();
}
}
```
3. Controller层
管理员业务逻辑的服务类AdminService(核心代码是获取RSA公钥并保存到数据库中):
```java
@Service
public class AdminService {
@Autowired
private AdminMapper adminMapper;
@Autowired
private RSAUtil rsaUtil;
public Admin findByUsername(String username) {
Admin admin = adminMapper.findByUsername(username);
if (admin != null && admin.getPublicKey() == null) {
// 如果RSA公钥不存在,则生成新的公钥并保存到数据库中
Map<String, Object> keyMap = rsaUtil.genKeyPair();
String publicKey = rsaUtil.getPublicKey(keyMap);
admin.setPublicKey(publicKey);
adminMapper.updatePublicKeyById(admin.getId(), publicKey);
}
return admin;
}
}
```
4. 工具类
RSA加密算法的工具类RSAUtil(使用了Bouncy Castle库):
```java
@Component
public class RSAUtil {
// 生成RSA密钥对
public Map<String, Object> genKeyPair() {
try {
Security.addProvider(new BouncyCastleProvider());
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA", "BC");
keyPairGen.initialize(1024, new SecureRandom());
KeyPair keyPair = keyPairGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
Map<String, Object> keyMap = new HashMap<>();
keyMap.put("private", privateKey);
keyMap.put("public", publicKey);
return keyMap;
} catch (Exception e) {
throw new RuntimeException("RSA密钥生成失败!", e);
}
}
// 获取RSA公钥字符串
public String getPublicKey(Map<String, Object> keyMap) {
try {
PublicKey publicKey = (PublicKey) keyMap.get("public");
return Base64.getEncoder().encodeToString(publicKey.getEncoded());
} catch (Exception e) {
throw new RuntimeException("RSA公钥获取失败!", e);
}
}
// RSA加密
public String encrypt(String plaintext, String publicKeyStr) {
try {
Security.addProvider(new BouncyCastleProvider());
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyStr);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(publicKeyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA", "BC");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
Cipher cipher = Cipher.getInstance("RSA/None/PKCS1Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] ciphertextBytes = cipher.doFinal(plaintext.getBytes());
return Base64.getEncoder().encodeToString(ciphertextBytes);
} catch (Exception e) {
throw new RuntimeException("RSA加密失败!", e);
}
}
}
```
以上是使用MVC模式进行后端管理员RSA加密登录的具体代码实现,仅供参考。
在Javaweb项目中用MVC模式进行后端管理员RSA加密登录具体代码实现
在后端管理员RSA加密登录的具体代码实现中,我们需要采用MVC模式。
首先,我们需要建立一个Model类,定义管理员的用户名和密码,以及RSA加密过程中需要使用的秘钥。该类的代码实现如下:
```
public class AdminModel {
private String userName;
private String password;
private String privateKey;
private String publicKey;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public void generateRSAKeys() throws Exception {
// 生成秘钥对,并用Base64编码转换成字符串形式存储
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
this.privateKey = Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded());
this.publicKey = Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded());
}
}
```
接下来,我们建立一个Controller类,该类用于接收管理员输入的用户名和密码,并调用Model中的方法进行RSA加密,最后将加密后的密文和公钥返回给View。Controller类的代码实现如下:
```
public class AdminController {
public AdminModel authenticate(String userName, String password) throws Exception {
AdminModel model = new AdminModel();
// 设置用户名和密码
model.setUserName(userName);
model.setPassword(password);
// 生成RSA秘钥对
model.generateRSAKeys();
// 使用公钥进行RSA加密
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(model.getPublicKey())));
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedPassword = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));
model.setPassword(Base64.getEncoder().encodeToString(encryptedPassword));
return model;
}
}
```
最后,我们建立一个View类,该类用于显示输入用户名和密码的页面,并将结果显示给管理员。View类的代码实现如下:
```
public class AdminView {
public void displayResult(String encryptedPassword, String publicKey) {
// 将加密后的密文和公钥显示给管理员
System.out.println("Encrypted password: " + encryptedPassword);
System.out.println("Public key: " + publicKey);
}
}
```
整合以上三个类,我们在Javaweb项目中可以实现后端管理员RSA加密登录。其具体代码流程如下:
```
public class AdminServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 从请求中获取用户名和密码
String userName = request.getParameter("userName");
String password = request.getParameter("password");
// 调用Controller中的authenticate方法进行RSA加密
AdminController controller = new AdminController();
AdminModel model = null;
try {
model = controller.authenticate(userName, password);
} catch (Exception e) {
e.printStackTrace();
}
// 将加密后的密文和公钥显示给管理员
AdminView view = new AdminView();
view.displayResult(model.getPassword(), model.getPublicKey());
}
}
```