【C#生态园】提高开发效率:6种必备C#开发库全面解析

C#开发利器:探索6种不可错过的开发库

前言

在软件开发的世界中,数据交换和通信是至关重要的。为了更高效地处理结构化数据、序列化和反序列化数据以及创建REST客户端和API框架,开发人员需要借助一些强大的工具和库。本文将介绍几种流行的C#开发库,分别是Protocol Buffers、Apache Avro、RestSharp、NancyFX、Json.NET和ServiceStack。通过对这些库的功能、使用场景、安装配置以及API概览进行深入探讨,我们可以更好地理解它们在现代软件开发中的重要性。

欢迎订阅专栏:C#生态园

文章目录

  • C#开发利器:探索6种不可错过的开发库
    • 前言
    • 1. Protocol Buffers:Google的高效结构化数据交换格式
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本设置
      • 1.3 API 概览
        • 1.3.1 数据序列化
        • 1.3.2 数据反序列化
    • 2. Apache Avro:一个数据序列化系统
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装指南
        • 2.2.2 基本设置
      • 2.3 API 概览
        • 2.3.1 数据编码
        • 2.3.2 数据解码
    • 3. RestSharp:用于创建REST客户端的简单库
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本设置
      • 3.3 API 概览
        • 3.3.1 发起请求
        • 3.3.2 处理响应
    • 4. NancyFX:轻量级、快速且高度模块化的Web框架
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本设置
      • 4.3 API 概览
        • 4.3.1 路由设置
        • 4.3.2 模块化开发
    • 5. Json.NET:一个流行的JSON序列化和反序列化库
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指导
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 JSON序列化
        • 5.3.2 JSON反序列化
    • 6. ServiceStack:一个全功能的C# REST API框架
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本设置
      • 6.3 API 概览
        • 6.3.1 服务创建
        • 6.3.2 数据访问
    • 总结

1. Protocol Buffers:Google的高效结构化数据交换格式

1.1 简介

Protocol Buffers 是由 Google 开发的一种轻量、高效的结构化数据交换格式,可用于通信协议、数据存储等领域。其核心功能包括定义数据结构和生成代码,以实现快速的数据序列化和反序列化。

1.1.1 核心功能
  • 定义数据结构:使用.proto文件定义消息类型和字段
  • 代码生成:根据.proto文件生成对应语言的数据访问类
1.1.2 使用场景

Protocol Buffers 适用于需要高效数据交换的场景,如网络通信、分布式系统、持久化存储等。

1.2 安装与配置

1.2.1 安装指南

首先,需要从 Protocol Buffers 官方网站 下载并安装 Protocol Buffers 工具。

然后,根据不同的开发语言,选择对应的 Protocol Buffers 插件或库进行安装。

1.2.2 基本设置

安装完成后,可以开始编写.proto文件定义数据结构,并通过 Protocol Buffers 工具生成对应语言的数据访问类。

1.3 API 概览

1.3.1 数据序列化

以下为 C# 中使用 Protocol Buffers 进行数据序列化的示例:

// 定义消息类型
message Person {required string name = 1;required int32 id = 2;optional string email = 3;
}// 创建 Person 对象
Person person = new Person
{Name = "Alice",Id = 123,Email = "alice@example.com"
};// 序列化为字节数组
byte[] data;
using (MemoryStream stream = new MemoryStream())
{person.WriteTo(stream);data = stream.ToArray();
}

官网链接:Protocol Buffers - C# Tutorial

1.3.2 数据反序列化

下面是 C# 中使用 Protocol Buffers 进行数据反序列化的示例:

// 从字节数组解析出 Person 对象
Person deserializedPerson = Person.Parser.ParseFrom(data);// 访问反序列化后的数据
Console.WriteLine(deserializedPerson.Name);
Console.WriteLine(deserializedPerson.Id);
Console.WriteLine(deserializedPerson.Email);

官网链接:Protocol Buffers - C# Tutorial

通过 Protocol Buffers,开发者能够更加高效地处理结构化数据,提高通信效率和系统性能。

2. Apache Avro:一个数据序列化系统

2.1 简介

Apache Avro 是一个用于数据序列化的系统,它提供了一种远程过程调用(RPC)和持久性的数据交换格式。Avro 使用 JSON 来定义数据类型和通信协议,并在 Java, C#, C, C++, Python 和 Ruby 等语言中以二进制形式进行序列化。

2.1.1 核心功能
  • 数据序列化和反序列化
  • 动态计算存储模式
  • 支持跨语言平台
  • 丰富的数据结构
2.1.2 使用场景

Avro 可以广泛应用于大数据领域,特别是在 Hadoop 生态系统中的数据序列化和数据交换方面。

2.2 安装与配置

2.2.1 安装指南

Avro 的安装非常简单,只需要下载 Avro 的库文件并将其引入到项目中即可开始使用。具体的安装步骤可以参考 Apache Avro 官方网站。

2.2.2 基本设置

在项目中引入 Avro 库后,可以根据需要进行一些基本的配置,例如指定数据序列化格式、定义数据模式等。

2.3 API 概览

2.3.1 数据编码
using Avro;
using Avro.IO;
using Avro.Specific;namespace AvroExample
{public class DataEncoding{public byte[] EncodeData(User user){using (var ms = new System.IO.MemoryStream()){var writer = new SpecificDatumWriter<User>();var encoder = new BinaryEncoder(ms);writer.Write(user, encoder);return ms.ToArray();}}}
}
2.3.2 数据解码
using Avro;
using Avro.IO;
using Avro.Specific;namespace AvroExample
{public class DataDecoding{public User DecodeData(byte[] data){using (var ms = new System.IO.MemoryStream(data)){var reader = new SpecificDatumReader<User>();var decoder = new BinaryDecoder(ms);return reader.Read(null, decoder);}}}
}

以上是一个简单的 C# 示例代码,演示了如何使用 Avro 进行数据编码和解码。更多关于 Avro 的 API 使用方法,请参考 Avro API 文档。

希望这篇文章能够帮助你了解 Apache Avro 的基本概念和使用方法。

3. RestSharp:用于创建REST客户端的简单库

3.1 简介

RestSharp 是一个用于创建 REST 客户端的简单库,它使得在 .NET 中进行 HTTP 请求变得非常容易。

3.1.1 核心功能

RestSharp 提供了一种简单和直观的方式来处理 RESTful 服务,包括发送 GET、POST、PUT 和 DELETE 请求,处理响应等功能。

3.1.2 使用场景

RestSharp 可以广泛应用于各种需要与 RESTful 服务进行交互的场景,比如调用外部 API,进行数据交换等。

3.2 安装与配置

3.2.1 安装指南

你可以通过 NuGet 包管理器来安装 RestSharp。在 Visual Studio 中,选择你的项目 -> 右键点击“管理 NuGet 程序包” -> 搜索 RestSharp -> 点击“安装”。

// 使用 NuGet Package Manager 进行安装
Install-Package RestSharp
3.2.2 基本设置

在使用 RestSharp 之前,你需要引入相关命名空间:

using RestSharp;

3.3 API 概览

3.3.1 发起请求

下面是一个使用 RestSharp 发起 GET 请求的示例:

var client = new RestClient("https://api.example.com");
var request = new RestRequest("resource/{id}", Method.GET);
request.AddUrlSegment("id", "123"); // 替换 idIRestResponse response = client.Execute(request);
var content = response.Content; // 响应内容

上述代码中,我们首先创建了一个 RestClient 实例,并指定了要请求的基础 URL。然后,我们创建了一个包含资源路径和请求类型的 RestRequest 对象,并使用 AddUrlSegment 方法替换 URL 中的参数。最后,通过调用 client.Execute(request) 发起了请求,并获取到了响应内容。

3.3.2 处理响应

当我们收到响应后,可以通过 IRestResponse 对象来获取响应的各种信息,如状态码、响应头和响应内容。

if (response.IsSuccessful)
{// 请求成功Console.WriteLine("Request successful!");
}
else
{// 请求失败Console.WriteLine("Request failed with status code: " + response.StatusCode);
}Console.WriteLine("Response content: " + content);

以上例子展示了如何判断请求是否成功以及如何获取响应内容。

更多关于 RestSharp 的详细信息,请参考 RestSharp GitHub 页面。

4. NancyFX:轻量级、快速且高度模块化的Web框架

4.1 简介

NancyFX 是一个基于 .NET 平台的轻量级、快速且高度模块化的Web框架。它提供了一种简单、直观的方式来构建 HTTP API 和 Web 应用程序。

4.1.1 核心功能
  • 支持路由设置
  • 支持模块化开发
  • 易于扩展
4.1.2 使用场景

NancyFX 可以用于构建各种规模的Web应用程序,从小型的API服务到复杂的Web应用程序,都能够胜任。

4.2 安装与配置

4.2.1 安装指南

首先,使用NuGet包管理器或通过命令行安装NancyFX:

Install-Package Nancy
4.2.2 基本设置

在应用程序中引入 Nancy 的命名空间:

using Nancy;

然后创建一个继承自 NancyModule 的类,并实现你的路由处理逻辑:

public class MainModule : NancyModule
{public MainModule(){Get("/", args => "Hello World");}
}

4.3 API 概览

4.3.1 路由设置

NancyFX 支持使用简洁明了的方式进行路由设置。例如,在上述代码示例中,Get("/", args => "Hello World") 就是一个用于处理 GET 请求的路由设置,当用户访问根路径时,会返回"Hello World"。

更多关于路由设置的内容可以在Nancy文档中找到。

4.3.2 模块化开发

NancyFX 鼓励模块化开发,可以将不同功能模块分别放置在不同的模块中,增强代码可读性和可维护性。

下面是一个简单的模块化开发示例:

public class ProductsModule : NancyModule
{public ProductsModule(){Get("/products", args => { /* Return a list of products */ });Get("/products/{id}", args => { /* Return the product with the specified ID */ });Post("/products", args => { /* Create a new product */ });Put("/products/{id}", args => { /* Update the product with the specified ID */ });Delete("/products/{id}", args => { /* Delete the product with the specified ID */ });}
}

在这个示例中,ProductsModule 包含了所有与产品相关的路由设置,使得代码组织更加清晰。

更多关于模块化开发的内容可以在Nancy文档中找到。

5. Json.NET:一个流行的JSON序列化和反序列化库

5.1 简介

Json.NET 是一个流行的 JSON 序列化和反序列化库,由 Newtonsoft 公司开发。它为 C# 提供了强大且灵活的 JSON 处理能力,在多种场景下被广泛使用。

5.1.1 核心功能

Json.NET 提供了高效的 JSON 数据序列化和反序列化功能,支持复杂对象、数据结构和自定义类型的转换。它还具有强大的 LINQ to JSON 功能,可用于动态查询和修改 JSON 数据。

5.1.2 使用场景

Json.NET 在 Web 开发、移动应用程序开发以及各种数据交换场景中都有着广泛的应用。无论是处理 RESTful API 的数据,还是在前后端之间进行数据交换,Json.NET 都能提供便捷而高效的解决方案。

5.2 安装与配置

5.2.1 安装指导

可以通过 NuGet 包管理器来安装 Json.NET。在 Visual Studio 中,打开 NuGet 包管理器控制台,执行以下命令即可完成安装:

Install-Package Newtonsoft.Json
5.2.2 基本配置

安装完成后,可以在 C# 项目中引入 Newtonsoft.Json 命名空间,以便在代码中直接使用 Json.NET 提供的功能。

using Newtonsoft.Json;

5.3 API 概览

5.3.1 JSON序列化

Json.NET 提供了简单易用的 JSON 序列化功能。以下是一个基本的示例,将对象序列化为 JSON 字符串:

public class Person
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(){Person person = new Person { Name = "Alice", Age = 30 };string json = JsonConvert.SerializeObject(person);Console.WriteLine(json);}
}

此时,json 变量的值将会是 {"Name":"Alice","Age":30}

更多关于 JSON 序列化的内容,请参阅Json.NET官方文档。

5.3.2 JSON反序列化

Json.NET 同样支持从 JSON 字符串反序列化为对象。下面是一个简单的反序列化示例:

string json = @"{'Name':'Bob','Age':25}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name); // 输出 Bob
Console.WriteLine(person.Age);  // 输出 25

在这个例子中,json 字符串被反序列化为 Person 对象,实现了从 JSON 到对象的转换。

更多关于 JSON 反序列化的内容,请参阅Json.NET官方文档。

6. ServiceStack:一个全功能的C# REST API框架

ServiceStack是一个针对C#语言开发的全功能REST API框架,提供了丰富的功能和组件,使得开发者能够轻松地构建高性能的Web服务。

6.1 简介

ServiceStack框架具有以下核心功能:

6.1.1 核心功能
  • 快速、简单地创建REST API
  • 支持多种数据格式,包括JSON、XML等
  • 内置身份验证和授权机制
  • 集成了ORM、缓存、消息队列等常用工具
  • 提供了强大的插件系统
6.1.2 使用场景

ServiceStack适用于构建各种规模的Web服务,包括企业级应用、移动端API、微服务等场景,尤其擅长处理高并发、大规模数据交互的情况。

6.2 安装与配置

6.2.1 安装指南

ServiceStack可以通过NuGet进行安装,只需在Visual Studio的包管理器控制台中执行以下命令即可安装ServiceStack:

Install-Package ServiceStack

官方链接:ServiceStack NuGet

6.2.2 基本设置

安装完成后,需要在项目中进行基本配置,例如启用ServiceStack的特性路由、配置数据访问等。以下是一个简单的示例:

public class AppHost : AppHostBase
{public AppHost() : base("ServiceStack Sample", typeof(MyServices).Assembly) { }public override void Configure(Container container){// 启用ServiceStack特性路由SetConfig(new HostConfig { HandlerFactoryPath = "api" });// 配置数据库连接var dbFactory = new OrmLiteConnectionFactory("Server=localhost;Database=test;User Id=user;Password=password",MySqlDialect.Provider);container.Register<IDbConnectionFactory>(dbFactory);}
}

在上面的示例中,创建了一个AppHost并进行了基本配置,包括启用ServiceStack的特性路由和配置了数据库连接。

6.3 API 概览

6.3.1 服务创建

ServiceStack可以通过简单继承Service类来创建服务,以下是一个简单的示例:

[Route("/hello/{Name}")]
public class HelloRequest : IReturn<HelloResponse>
{public string Name { get; set; }
}public class HelloService : Service
{public object Any(HelloRequest request){return new HelloResponse { Result = "Hello, " + request.Name };}
}public class HelloResponse
{public string Result { get; set; }
}

在上面的示例中,创建了一个HelloService来处理HelloRequest,并返回HelloResponse

6.3.2 数据访问

ServiceStack内置了ORM支持,如使用OrmLite可以轻松进行数据访问,以下是一个简单的示例:

using (var db = HostContext.Resolve<IDbConnectionFactory>().OpenDbConnection())
{var results = db.Select<Poco>();// 对结果进行处理
}

在上面的示例中,通过ServiceStack的依赖注入解析了数据库连接,并进行了简单的数据查询操作。

以上是ServiceStack框架的简要介绍、安装配置以及API概览,希望能够帮助您快速了解和上手ServiceStack框架。

总结

本文从多个角度全面介绍了6种流行的C#开发库,包括Protocol Buffers、Apache Avro、RestSharp、NancyFX、Json.NET和ServiceStack。这些库分别针对数据交换格式、数据序列化系统、REST客户端创建、Web框架和JSON序列化及反序列化等方面提供了强大的功能和便利的工具。通过本文的阅读,读者可以更加深入地了解这些库的特点、使用场景和实际应用,为自己的项目选择合适的工具提供了参考和指导。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/439028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI】AIOT简介

随着技术的快速发展&#xff0c;人工智能AI和物联网IoT已经成为当今最热门的技术领域。AIOT是人工智能和物联网的结合&#xff0c;使物联网设备更加智能化&#xff0c;能够进行自主决策和学习的技术。 通过物联网产生、收集来自不同维度的、海量的数据存储于云端、边缘端&#…

828华为云征文|部署个人文档管理系统 Docspell

828华为云征文&#xff5c;部署个人文档管理系统 Docspell 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 Docspell3.1 Docspell 介绍3.2 Docspell 部署3.3 Docspell 使用…

深度学习基础—目标定位与特征点检测

1.目标定位 &#xff08;1&#xff09;定义 目标定位就是在图片中&#xff0c;定位对象的位置&#xff0c;对于对象的位置可以用框圈住显示。如下图所示&#xff1a; 假设正在进行图片分类工作&#xff0c;那么这个汽车图片很有可能被分类为汽车类别。对于目标定位&#xff0c;…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习01(环境准备)

1 准备工作 由于创建数据中心需要安装很多服务器&#xff0c;这些服务器要耗费很所物理物理计算资源、存储资源、网络资源和软件资源&#xff0c;作为穷学生只有几百块的n手笔记本&#xff0c;不可能买十几台服务器来搭建数据中心&#xff0c;也不愿意跑实验室&#xff0c;想躺…

Pikachu-Cross-Site Scripting-xss之htmlspecialchars

首先输入各种字符 查看页面元素&#xff0c;可以看到这里对一些符号做了转换&#xff0c;但是 单引号等几个符号没处理&#xff1b; 从代码上看&#xff1b;使用单引号做闭合&#xff1b; 构造payload a onclickalert(11) 提交&#xff0c;得到xss攻击

网约班车升级手机端退票

背景 作为老古董程序员&#xff0c;不&#xff0c;应该叫互联网人员&#xff0c;因为我现在做的所有的事情&#xff0c;都是处于爱好&#xff0c;更多的时间是在和各行各业的朋友聊市场&#xff0c;聊需求&#xff0c;聊怎么通过IT互联网 改变实体行业的现状&#xff0c;准确的…

【Qt】控件概述(2)—— 按钮类控件

控件概述&#xff08;2&#xff09; 1. PushButton2. RadioButton——单选按钮2.1 使用2.2 区分信号 clicked&#xff0c;clicked(bool)&#xff0c;pressed&#xff0c;released&#xff0c;toggled(bool)2.3 QButtonGroup分组 3. CheckBox——复选按钮 1. PushButton QPushB…

《15分钟轻松学 Python》教程目录

为什么要写这个教程呢&#xff0c;主要是因为即使是AI技术突起的时代&#xff0c;想要用好AI做开发&#xff0c;那肯定离不开Python&#xff0c;就算最轻量级的智能体都有代码块要写&#xff0c;所以不一定要掌握完完整整的Python&#xff0c;只要掌握基础就能应对大部分场景。…

【机器学习】ID3、C4.5、CART 算法

目录 常见的决策树算法 1. ID3 2. C4.5 3. CART 决策树的优缺点 优点&#xff1a; 缺点&#xff1a; 决策树的优化 常见的决策树算法 1. ID3 ID3&#xff08;Iterative Dichotomiser 3&#xff09;算法使用信息增益作为特征选择的标准。它是一种贪心算法&#xff0c;信…

【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可…

python实现单例模式的常用三种方法-基于__new__/使用装饰器以及Python中的值类型、引用类型以及类的静态变量、读取进程和线程ID

一、python实现单例模式的常用三种方法-基于__new__,使用装饰器 涉及到类的使用就会有类的实例化&#xff0c;就会有类单例实现的需求&#xff0c;因为重复实例化会浪费资源。python中的单例模式与别的语言相比&#xff0c;单例实现的方法更丰富。虽然python实现单例的模式的方…

一文掌握Harbor镜像同步公有云镜像仓库实践

一文掌握Harbor镜像同步公有云镜像仓库实践 目录 1 引言2 概念 2.1 Harbor2.2 阿里云的镜像仓库ACR2.3 华为云的镜像仓库SWR2.4 Harbor复制管理同步镜像 2.4.1 复制管理的工作原理 2.5 Harbor同步镜像到公有云镜像仓库的优势 3 实验&#xff1a;通过Harbor 将容器镜像同步到公…

win7怎么禁用驱动强制数字签名?win7驱动程序强制数字签名禁用方法

在Windows 7 64位操作系统中&#xff0c;安装驱动程序时可能会遇到“数字签名”的问题&#xff0c;这是微软为了确保驱动程序的安全性和可靠性而引入的一项安全机制。本文将深入探讨这个问题&#xff0c;并提供有效的解决方案。 理解数字签名的概念是至关重要的。数字签名是一…

C语言复习概要(二)

本文目录 C语言中的数组与函数详解1. 引言2. 数组2.1. 什么是数组&#xff1f;语法&#xff1a;示例&#xff1a; 2.2. 数组的初始化示例 1&#xff1a;在声明时初始化示例 2&#xff1a;部分初始化示例 3&#xff1a;运行时赋值 2.3. 数组的访问与修改示例&#xff1a; 2.4. 多…

【Python游戏开发】贪吃蛇游戏demo

准备步骤 项目开发使用【Mu 编辑器】 1.新建项目&#xff0c;并导入游戏图片 游戏编写 1.创建场景 SIZE 15 # 每个格子的大小 WIDTH SIZE * 30 # 游戏场景总宽度 HEIGHT SIZE * 30 # 游戏场景总高度def draw():screen…

LabVIEW裂纹深度在线监测系统

随着铁路运输技术的快速发展&#xff0c;火车安全问题成为重中之重&#xff0c;尤其是轮面裂纹的检测和管理。裂纹的出现可能导致严重的列车事故&#xff0c;因此&#xff0c;建立可靠的在线监测系统&#xff0c;实时掌握裂纹情况&#xff0c;对保障铁路运输安全至关重要。 La…

在线JSON可视化工具--支持缩放

先前文章提到的超好用的JSON可视化工具&#xff0c;收到反馈&#xff0c;觉得工具好用&#xff0c;唯一不足就是不能缩放视图&#xff0c;其实是支持的&#xff0c;因为滚轮有可能是往下滚动&#xff0c;会与缩放冲突&#xff0c;所以这个工具设计为需要双击视图来触发打开缩放…

选择网络安全模式启动Windows系统,解决PC无法连接网络问题

目录 1、电脑无法连接网络 2、发现C:\Windows\System32\drivers路径下的很多文件不见了 3、使用360安全卫士中的断网急救箱工具修复&#xff0c;也就解决不了问题 4、重启系统&#xff0c;以网络安全模式启动系统&#xff0c;修复系统网络模块&#xff0c;完美解决问题 5、…

AI不可尽信

看到某项目有类似这样的一段代码 leaves : make([]int, 10) leaves leaves[:0]没理解这样的连续两行,有何作用? 初始化一个长度和容量都为10的切片,接着把切片长度设置为0 即如下demo: (在线地址) package mainimport "fmt"func main() {leaves : make([]int, 1…

加密与安全_HOTP一次性密码生成算法

文章目录 HOTP 的基础原理HOTP 的工作流程HOTP 的应用场景HOTP 的安全性安全性增强措施Code生成HOTP可配置项校验HOTP可拓展功能计数器&#xff08;counter&#xff09;计数器在客户端和服务端的作用计数器的同步机制客户端和服务端中的计数器表现服务端如何处理计数器不同步计…