当前位置: 首页 > article >正文

Kerberos4简单复现

文章目录

  • 前言
  • 一、设计参考资料
  • 二、具体设计
    • 1.数据传输字段
    • 2.主程序介绍
  • 总结


前言

完成Kerberos4的简单以面向对象的程序设计复现,设计实现是按照csdn博客参考的,与书本上的kerberos4有一点区别,但整体的设计(三次认证以及交互密钥使用)差不多。

一、设计参考资料

主要参考的是csdn上博主写的转到连接,里面的交互图很清晰,很适合初学者学习。
基于博客内容,完成了整个系统的实体序列图如下,由于是草稿手绘,部分地方细节不完善

时序图

二、具体设计

1.数据传输字段

因为是模拟,传输全部以String类型格式,不同块以分割,块内以;分割。代码如下:

    public String forward_as_req() throws Exception {
        String as_req =  this.userName +";"
                +this.IP+";"+ this.Timestamp;
        System.out.println("第一次认证");
        System.out.println("Client发送as_req: "+as_req);
        return as_req;
    }

2.主程序介绍

提供两个主程序,Kerberos4Runner和AuthenticationSystem。Kerberos4Runner模拟单个用户传输流程,AuthenticationSystem提供多个用户一起认证。
代码如下(示例):

 public static void main(String[] args) throws Exception {
        AuthenticationSystem authSystem = new AuthenticationSystem("ID1", "138.121.41.4");

        // 新增用户
        authSystem.addClient("用户1", "120.0.0.1");
        authSystem.addClient("用户2", "120.0.0.2");
        authSystem.addClient("用户3", "120.0.0.3");

        authSystem.performAuthentication();
    }

 /*
            第一次认证部分
            Client——AS
             */
            String as_req = client.forward_as_req();
            String as_rep = as.receivedAsReq(as_req);
            client.receivedAsRep(as_rep);
            /*
            第二次认证
             */
            String TGS_req = client.forward_tgs_req();
            String TGS_rep = tgs.receivedTGS_req(TGS_req);
            client.receivedTgsReq(TGS_rep);

总结

遇到的困难在于理清楚这个协议的认证流程,在画出时序图之后基本上就是简单的敲代码了。后期可以改进部分包括初始化过程中各实体的密钥的存储和服务资源的存储以及字段格式的重新设计。源代码发布到gitee,源代码地址。


http://www.kler.cn/news/355337.html

相关文章:

  • IP不纯净的后果及解决方案
  • 【JPCS独立出版,EI检索稳定】第三届能源互联网及电力系统国际学术会议(ICEIPS 2024)
  • React Componet类组件详解(老项目)
  • 数据结构编程实践20讲(Python版)—10B+树
  • Nature Communications 英国伦敦大学等提出仿生自适应多平面触觉系统,实现机械与振动双重感知结合
  • IC验证面试中常问知识点总结(四)附带详细回答!!!
  • 使用Python的socket库实现两台服务器TCP协议的数据发送和接收
  • MongoDB文档的详细使用说明
  • 韩信走马分油c++
  • asp.net core Partial 分部视图、视图组件(core mvc 才支持)、视图、razor page、mvc
  • 在 Android 开发中,如何实现蓝牙连接设备?
  • LIN从节点:识别帧头各场长度测试
  • linux IP更新后系统环境无法访问127.0.0.1
  • 黑马程序员-redis项目实践笔记1
  • Pandas数据类型
  • 基于强化学习的多码头集卡路径优化
  • SQL进阶技巧:如何删除第N次连续出现NULL值所存在的行?
  • linux git submodule 需要输入密码的问题
  • 计算PSNR, SSIM, VAMF工具
  • 网络攻击的新趋势:勒索软件与零日漏洞