• 用java代码实现security


    Java中security的实现主要涉及到以下几个方面:

    1. 认证(Authentication) 认证是确认用户身份的过程,Java中提供了不同的认证机制来保护应用程序不被未授权的用户访问。常用的认证机制有以下几种:
    • 基于口令的认证:要求用户输入用户名和口令来进行认证。
    • 基于证书的认证:使用数字签名证书来对用户进行身份认证。
    • 基于生物识别特征的认证:使用指纹、虹膜识别等身份信息来进行认证。
    1. 授权(Authorization) 授权是确定用户是否被允许访问某些资源的过程。Java中的授权机制主要使用AccessController来进行授权,可以设置不同的访问控制策略来限制用户的访问权限。

    2. 加密和解密 Java中提供了许多加密和解密算法来保护数据的安全,包括对称加密算法、非对称加密算法、哈希算法等。常用的加密算法有AES、DES、RSA等。

    3. 安全管理器(Security Manager) Java中的安全管理器可以对Java程序中的安全策略进行管理和控制,保证程序的安全运行。可以通过设置安全策略文件来进行配置,对于不符合安全策略的操作,会抛出SecurityException异常。

    示例代码:

    1. 基于口令的认证
    1. import java.util.Scanner;
    2. public class PasswordAuthentication {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. String username = scanner.nextLine();
    6. String password = scanner.nextLine();
    7. if (isAuthenticated(username, password)) {
    8. System.out.println("Authenticated successfully.");
    9. } else {
    10. System.out.println("Authentication failed.");
    11. }
    12. }
    13. private static boolean isAuthenticated(String username, String password) {
    14. // 使用数据库或文件存储的用户名和密码来进行认证
    15. return "admin".equals(username) && "123456".equals(password);
    16. }
    17. }

    1. 基于AccessController的授权
    1. import java.security.AccessController;
    2. import java.security.PrivilegedAction;
    3. public class Authorization {
    4. public static void main(String[] args) {
    5. // 以admin用户的身份执行操作
    6. System.out.println(runAsAdmin(() -> {
    7. System.out.println("Operation 1");
    8. return null;
    9. }));
    10. // 以guest用户的身份执行操作
    11. System.out.println(runAsGuest(() -> {
    12. System.out.println("Operation 2");
    13. return null;
    14. }));
    15. }
    16. private static Object runAsAdmin(PrivilegedAction action) {
    17. return AccessController.doPrivileged(action);
    18. }
    19. private static Object runAsGuest(PrivilegedAction action) {
    20. // 设置访问控制策略,限制guest用户的权限
    21. System.setSecurityManager(new SecurityManager());
    22. return AccessController.doPrivileged(action);
    23. }
    24. }

    1. 加密和解密
    1. import javax.crypto.Cipher;
    2. import javax.crypto.KeyGenerator;
    3. import javax.crypto.SecretKey;
    4. import javax.crypto.spec.SecretKeySpec;
    5. import java.util.Base64;
    6. public class Encryption {
    7. public static void main(String[] args) throws Exception {
    8. // 生成密钥
    9. KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
    10. keyGenerator.init(128);
    11. SecretKey secretKey = keyGenerator.generateKey();
    12. byte[] keyBytes = secretKey.getEncoded();
    13. // 使用AES算法进行加密和解密
    14. String data = "Hello, world!";
    15. String algorithm = "AES";
    16. byte[] plaintext = data.getBytes("UTF-8");
    17. byte[] ciphertext = encrypt(algorithm, keyBytes, plaintext);
    18. byte[] decrypted = decrypt(algorithm, keyBytes, ciphertext);
    19. System.out.println("Plaintext: " + data);
    20. System.out.println("Ciphertext: " + Base64.getEncoder().encodeToString(ciphertext));
    21. System.out.println("Decrypted: " + new String(decrypted, "UTF-8"));
    22. }
    23. private static byte[] encrypt(String algorithm, byte[] keyBytes, byte[] plaintext) throws Exception {
    24. SecretKeySpec keySpec = new SecretKeySpec(keyBytes, algorithm);
    25. Cipher cipher = Cipher.getInstance(algorithm);
    26. cipher.init(Cipher.ENCRYPT_MODE, keySpec);
    27. return cipher.doFinal(plaintext);
    28. }
    29. private static byte[] decrypt(String algorithm, byte[] keyBytes, byte[] ciphertext) throws Exception {
    30. SecretKeySpec keySpec = new SecretKeySpec(keyBytes, algorithm);
    31. Cipher cipher = Cipher.getInstance(algorithm);
    32. cipher.init(Cipher.DECRYPT_MODE, keySpec);
    33. return cipher.doFinal(ciphertext);
    34. }
    35. }

    1. 安全管理器
    1. public class SecurityManagerExample {
    2. public static void main(String[] args) {
    3. // 在没有安全管理器的情况下运行
    4. System.out.println(System.getSecurityManager()); // 输出null
    5. // 设置安全策略
    6. System.setProperty("java.security.policy", "security.policy");
    7. System.setSecurityManager(new SecurityManager());
    8. // 执行具有不同权限的操作
    9. try {
    10. AccessController.doPrivileged((PrivilegedAction) () -> {
    11. System.out.println("Operation 1: All permission");
    12. return null;
    13. });
    14. AccessController.doPrivileged((PrivilegedAction) () -> {
    15. System.getProperty("user.dir");
    16. System.out.println("Operation 2: Read property");
    17. return null;
    18. });
    19. AccessController.doPrivileged((PrivilegedAction) () -> {
    20. new File("test.txt").delete();
    21. System.out.println("Operation 3: Delete file");
    22. return null;
    23. });
    24. } catch (Exception e) {
    25. e.printStackTrace();
    26. }
    27. }
    28. }

    security.policy文件内容示例:

    1. grant {
    2. permission java.security.AllPermission;
    3. };

  • 相关阅读:
    字符设备驱动框架(字符设备基础一)
    SpringTask ----定时任务框架 ----苍穹外卖day10
    Iview Tree组件点击标题展开
    命令执行漏洞复现攻击:识别威胁并加强安全
    三艾云 Kubernetes 集群最佳实践
    HTML拆分与共享方式——多HTML组合技术
    Windows 下 MySQL 8.1.0 安装及配置图文指南,快速搭建实验学习环境
    ftp端口号20和21的区别是什么?
    一款免费无广、简单易用的安全软件:火绒安全软件
    完整、免费的把pdf转word文档
  • 原文地址:https://blog.csdn.net/Stephen_CY666/article/details/134276854