首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【C++高阶】深入理解C++ I/O流:标准库中的隐藏宝石

【C++高阶】深入理解C++ I/O流:标准库中的隐藏宝石

作者头像
Eternity._
发布于 2024-09-24 09:09:44
发布于 2024-09-24 09:09:44
32200
代码可运行
举报
文章被收录于专栏:登神长阶登神长阶
运行总次数:0
代码可运行

前言:在编程的世界中,输入与输出(I/O)是连接程序与现实世界的桥梁。无论是从键盘接收用户指令,还是将处理结果输出到屏幕或文件,I/O操作都是程序设计中不可或缺的一部分。对于C++这一强大而灵活的编程语言而言,其丰富的I/O流库更是为开发者提供了高效、灵活且易于使用的数据交换机制

C++的I/O流库不仅涵盖了基本的输入输出操作,如标准输入输出流(cin和cout)、文件流(ifstream和ofstream)以及字符串流(istringstream、ostringstream和stringstream),还提供了丰富的格式化选项和错误处理机制,使得开发者能够轻松应对各种复杂的I/O需求

然而,尽管C++ I/O流库功能强大,但其使用方式却相对复杂,尤其是对于初学者而言,往往难以快速掌握。因此,本文旨在通过深入浅出的方式,引导读者逐步了解C++ I/O流库的基本原理、使用方法以及高级特性。我们将从最基本的输入输出操作讲起,逐步深入到文件处理、字符串流操作、格式化输出等高级话题,帮助读者建立起对C++ I/O流库的全面认识

让我们一起走进C++ I/O流的世界,探索其背后的奥秘,共同提升编程技能,创造出更加高效、优雅的C++程序!


📒1. C语言的输入与输出

C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()

scanf(): 从标准输入设备(键盘)读取数据,并将值存放在变量中 printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)

注意宽度输出和精度输出控制

C语言借助了相应的缓冲区来进行输入与输出,如图:

输入输出缓冲区:

  • 可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏 蔽这部分的差异,可以很容易写出可移植的程序
  • 可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这 部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”

注意事项:

  • 在使用scanf()时,务必检查其返回值以确保成功读取了预期数量的输入项
  • 格式化字符串中的格式说明符应与输入数据的类型严格匹配

📚2. 流是什么

“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且具有方向性的数据( 其单位可以是bit,byte,packet )的抽象描述

C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设 备(显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”

C++中的流(Streams)是一种抽象的概念,用于表示数据序列的源或目标。它们提供了一种统一的方法来执行输入/输出操作,无论是从文件、内存缓冲区、控制台或其他输入输出设备读取或写入数据。流的概念使得C++的输入输出操作变得既灵活又强大

流的特征:有序连续、具有方向性

  • 为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能

📜3. C++ IO流

C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类


🌞C++标准IO流

C++标准IO流(Standard Input/Output Streams)是C++标准库中的一部分,它们提供了一套丰富的类和函数,用于处理标准输入输出操作,如从控制台读取数据或向控制台输出数据。这些流是面向对象的,并且基于继承体系,使得它们能够灵活地处理各种输入输出任务

  • std::fstream:同时继承自std::istream和std::ostream,因此支持同时读写文件

C++标准库提供了4个全局流对象cin、cout、cerr、clog

  • 使用cout进行标准输出,即数据从内存流向控制台(显示器)
  • 使用cin进行标准输入即数据通过键盘输入到程序中
  • 同时C++标准库还提供了cerr用来进行标准错误的输出,以及clog进行日志的输出

在使用时候必须要包含文件并引入std标准命名空间

注意事项:

  • cin为缓冲流。键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。如果一次输入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法挽回了。只有把输入缓冲区中的数据取完后,才要求输入新的数据
  • 输入的数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state中对 应位置位(置1),程序继续
  • 空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输 入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有 空格。回车符也无法读入
  • cin和cout可以直接输入和输出内置类型数据,原因:标准库已经将所有内置类型的输入和输出全部重载了 cin文档 cout文档
  • 对于自定义类型,如果要支持cin和cout的标准输入输出,需要对<<和>>进行重载

调用的是operator>>,返回值是istream类型的对象,那么这里可以做逻辑条件值,源自于istream的对象又调用了operator booloperator bool调用时如果接收流失败,或者有结束标志,则返回false

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 日期类
class Date
{
	// 友元
	friend ostream& operator << (ostream& out, const Date& d);
	friend istream& operator >> (istream& in, Date& d);
public:
	Date(int year = 1, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
	operator bool()
	{
		// 假设输入_year为0,则结束
		if (_year == 0)
			return false;
		else
			return true;
	}
private:
	int _year;
	int _month;
	int _day;
};

istream& operator >> (istream& in, Date& d)
{
	in >> d._year >> d._month >> d._day;
	return in;
}

ostream& operator << (ostream& out, const Date& d)
{
	out << d._year << " " << d._month << " " << d._day;
	return out;
}

// C++ IO流,使用面向对象+运算符重载的方式
// 能更好的兼容自定义类型,流插入和流提取
int main()
{
	// 自动识别类型的本质--函数重载
	// 内置类型可以直接使用--因为库里面ostream类型已经实现了
	int i = 520;
	double j = 13.14;
	cout << i << endl;
	cout << j << endl;

	// 自定义类型则需要我们自己重载<< 和 >>
	Date d(2024, 9, 11);
	cout << d;
	while (d)
	{
		cin >> d;
		cout << d;
	}
	return 0;
}

⭐C++文件IO流

C++文件IO流(File Input/Output Streams)是C++标准库中的一部分,用于处理文件的读写操作。这些流封装了文件作为数据的来源或目标,使得文件的读写变得既方便又灵活。C++通过< fstream >头文件提供了文件IO流的相关类和函数

C++根据文件内容的数据格式分为二进制文件和文本文件

主要类

  • std::ifstream:继承自std::istream,用于从文件读取数据
  • std::ofstream:继承自std::ostream,用于向文件写入数据
  • std::fstream:同时继承自std::istream和std::ostream,因此支持同时读写文件

采用文件流对象操作文件的一般步骤:

    1. 定义一个文件流对象
    1. 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系
    1. 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写
    1. 关闭文件

二进制读写代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 文件流对象
struct ServerInfo
{
	// 二进制读写时,尽量避免使用容器
	string _address;
	//char _address[32];
	int _port;
	Date _date;
};

// 二进制读写
class BinIO
{
public:
	BinIO(const char* filename = "info.bin")
		:_filename(filename)
	{}

	void Write(const ServerInfo& winfo)
	{
		ofstream ofs(_filename, ofstream::out | ofstream::binary);
		ofs.write((const char*)&winfo, sizeof(winfo));
	}

	void Read(ServerInfo& rinfo)
	{
		ifstream ifs(_filename, ifstream::in | ifstream::binary);
		ifs.read((char*)&rinfo, sizeof(rinfo));
	}

private:
	string _filename = "info.bin"; // 配置文件
};

int main()
{
	ServerInfo winfo = { "10.0.2.15", 22, {2024, 9, 12 } };

	BinIO bin;
	bin.Write(winfo);

	ServerInfo info;
	bin.Read(info);

	cout << info._address << endl;
	cout << info._port << endl;
	cout << info._date << endl;

	return 0;
}

注意:二进制读写时,尽量避免使用容器,容器中存放的指针可能会在读取文件时,释放变成野指针


文件读写代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 文件流对象
struct ServerInfo
{
	string _address;
	//char _address[32];
	int _port;
	Date _date;
};

// 文件读写
class TestIO
{
public:
	TestIO(const char* filename = "info.txt")
		:_filename(filename)
	{}

	void Write(const ServerInfo& winfo)
	{
		ofstream ofs(_filename);
		ofs << winfo._address << endl;
		ofs << winfo._port << endl;;
		ofs << winfo._date << endl;;
	}

	void Read(ServerInfo& rinfo)
	{
		ifstream ifs(_filename);
		ifs >> rinfo._address;
		ifs >> rinfo._port;
		ifs >> rinfo._date;
	}

private:
	string _filename = "info.txt"; // 配置文件
};

int main()
{
	ServerInfo winfo = { "10.0.2.15", 22, {2024, 9, 12 } };
	
	TestIO test;
	test.Write(winfo);
	
	ServerInfo info;
	test.Read(info);
	
	cout << info._address << endl;
	cout << info._port << endl;
	cout << info._date << endl;
	
	return 0;
}

📝4. stringstream

stringstream 是 C++ 标准库中的一个非常有用的类,它属于 < sstream > 头文件。stringstream 是一种输入/输出流(I/O stream),用于在内存中执行字符串的输入输出操作,类似于 cin 和 cout,但是它是针对字符串的。stringstream 可以被用来进行字符串的格式化、解析和转换,而不需要通过文件或控制台

在程序中如果想要使用stringstream,必须要包含头文件。在该头文件下,标准库三个类: istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作


🍁将数值类型数据格式化为字符串

C语言中,如果想要将一个整形变量的数据转化为字符串格式:

  • 使用itoa()函数 (C++中为 _itoa())
  • 使用sprintf()函数

但是两个函数在转化时,都得需要先给出保存结果的空间,那空间要给多大呢,就不太好界定, 而且转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	int n = 123456789;

	char s1[32];
	_itoa(n, s1, 10);

	char s2[32];
	sprintf(s2, "%d", n);

	char s3[32];
	sprintf(s3, "%f", n);

	return 0;
}

在C++中,可以使用stringstream类对象来避开此问题

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<sstream>
int main()
{
	int a = 12345678;
	string sa;
	// 将一个整形变量转化为字符串,存储到string类对象中
	stringstream s;
	s << a;
	s >> sa;
	cout << sa << endl;

	s.str("");
	s.clear(); // 清空s, 不清空会转化失败
	double d = 13.14;
	s << d;
	s >> sa;
	string sValue;
	sValue = s.str(); // str()方法:返回stringsteam中管理的string类型
	cout << sValue << endl;
	return 0;
}

注意:

  • 多次转换时,必须使用clear将上次转换状态清空掉 stringstream s在转换结尾时(即最后一个转换后),会将其内部状态设置为badbit,因此下一次转换是必须调用clear()将状态重置为goodbit才可以转换,但是clear()不会将stringstreams底层字符串清空掉
  • s.str(""),将stringstream底层管理string对象设置成"",否则多次转换时,会将结果全部累积在底层string对象中

🍂字符串拼接

关于字符串拼接,我们之前也了解过,两种常见方式:

  • std::string类中的append()函数
  • +=操作符

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
	string s1;
	s1 += "hello";
	s1 += " ";
	s1 += "world";
	cout << s1 << endl;

	string s2;
	s2.append("hello");
	s2.append(" ");
	s2.append("world");
	cout << s2 << endl;
	
	return 0;
}

现在我们也可以使用stringstreamostringstream来完成这一操作

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<sstream>
int main()
{
	// stringstream
	stringstream sstream;
	// 将多个字符串放入 sstream 中
	sstream << "hello" << " " << "world";
	cout << sstream.str() << endl;
	// 清空 sstream
	sstream.str("");
	
	// ostringstream
	ostringstream oss;
	oss << "hello" << " " << "world";
	cout << oss.str() << endl;
	return 0;
}

🌸序列化和反序列化

序列化和反序列化是计算机科学中常用的两个概念,它们主要涉及到将数据结构或对象状态转换为可以存储或传输的格式(序列化),以及将这些格式恢复回原始的数据结构或对象状态(反序列化)。这两个过程在数据持久化、网络通信、对象深拷贝等场景中非常有用

我们通过网络这个字符串发送给对象,实际开发中,信息相对更复杂,一般会选用Json、xml等方式进行更好的支持

代码示例 (C++):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<sstream>

struct ChatInfo
{
	string _name; // 名字
	int _id; // id
	Date _date; // 时间
	string _msg; // 聊天信息
};
int main()
{
	// 结构信息序列化为字符串
	ChatInfo winfo = { "张宝龙", 1314520, { 2024, 9, 12 }, "晚上一起激战CS:GO"
	};

	ostringstream oss;
	oss << winfo._name << endl;
	oss << winfo._id << endl;
	oss << winfo._date << endl;
	oss << winfo._msg << endl;

	string str = oss.str();
	cout << str << endl << endl;

	// 网络输出
	// 字符串解析成结构信息
	ChatInfo rInfo;
	istringstream iss(str);
	iss >> rInfo._name >> rInfo._id >> rInfo._date >> rInfo._msg;
	cout << "-------------------------------------------------------"<< endl;

	cout << "姓名:" << rInfo._name << "(" << rInfo._id << ") ";
	cout << rInfo._date << endl;
	cout << rInfo._name << ":>" << rInfo._msg << endl;

	cout << "-------------------------------------------------------"<< endl;
	return 0;
}

注意事项:

  • stringstream实际是在其底层维护了一个string类型的对象用来保存结果
  • 多次数据类型转化时,一定要用clear()来清空,才能正确转化,但clear()不会将stringstream底层的string对象清空
  • 可以使用s. str("")方法将底层string对象设置为""空字符串
  • 可以使用s.str()将让stringstream返回其底层的string对象
  • stringstream使用string类对象代替字符数组,可以避免缓冲区溢出的危险,而且其会对参数类型进行推演,不需要格式化控制,也不会出现格式化失败的风险,因此使用更方便,更安全

📖5. 总结

通过本次对C++ I/O流的学习之旅,我们一同探索了C++语言中这一强大而灵活的输入输出机制。从最初的标准输入输出流cin和cout,到文件流ifstream和ofstream的深入应用,再到字符串流istringstream、ostringstream和stringstream的灵活操作,我们见证了C++ I/O流库在数据处理和交换中的无限可能

学习过程中,我们不仅掌握了C++ I/O流库的基本用法,还学会了如何利用格式化选项来定制输出格式,使数据呈现更加符合需求的形式。同时,我们也深入了解了I/O操作中可能出现的异常和错误,并学习了相应的处理策略,以确保程序的健壮性和稳定性

最后,我希望这篇文章能够成为你学习C++ I/O流过程中的一盏明灯,为你指引方向,提供帮助。在未来的编程道路上,愿你能够运用所学,创造出更加精彩、高效的C++程序。再次感谢你的阅读,期待与你在更广阔的编程世界中相遇!

希望本文能够为你提供有益的参考和启示,让我们一起在编程的道路上不断前行! 谢谢大家支持本篇到这里就结束了,祝大家天天开心!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
后量子聚合签名;后量子聚合签名和MuSig2区别;量子攻击
推荐文章:深入探索MyBatis-Plus:高效实现字段模糊查询的秘诀-腾讯云开发者社区-腾讯云
zhangjiqun
2024/11/22
2320
Java - 深入理解加密解密和签名算法
Java应用接口安全性问题可能来源于多个方面,包括但不限于数据加密、身份验证、访问控制、输入验证等。下面我会对这些问题进行详细分析,并提供相应的解决方案和最佳实践。
小小工匠
2024/05/25
5370
Java - 深入理解加密解密和签名算法
IT领域常见的加密算法详细解析
对称加密算法使用同一个密钥进行加密和解密。这类算法的特点是加密解密速度快,适用于大量数据的加密,但由于密钥管理问题,通常只在安全信道内或结合非对称加密算法使用。
用户7353950
2024/11/23
3620
IT领域常见的加密算法详细解析
加解密算法分析与应用场景
在日常开发中,无论是使用何种编程语言,我们都会遇到加解密的需求。例如,为了保护接口数据安全,我们需要对数据进行加密传输;在HTTPS协议中,通过非对称加密传输客户端私钥,然后双方使用该私钥进行对称加密通信;使用MD5算法进行文件一致性校验等。然而,面对众多的加解密方案,我们往往不清楚何时使用哪种方法。本文将为您梳理当前主流的加解密技术,并对算法进行科普性说明,但不涉及具体算法分析。根据日常应用场景,加解密技术大致可分为以下四类:
不惑
2024/05/13
6780
加解密算法分析与应用场景
读《图解密码技术》(二):认证
原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/reading/20160705 微信订阅号:keeganlee_me 写于2016-07-05
Keegan小钢
2018/08/10
1.1K0
读《图解密码技术》(二):认证
量子危机下,区块链和加密货币只有死路一条?丨科技云·视角
随着原子力量的开发和释放,20世纪孕育诞生了核时代。如今,我们正处在一个同样重要、不可逆转的突破口上:从量子力学中吸收计算能力的时代即将到来。由于谷歌、IBM等科技巨头、顶级实验室和创业企业的积极介入,量子计算机正在加速进入实际的商业应用阶段。但同样的计算能力也可用来揭开更多的秘密,由数学家彼得·肖尔(Peter Shor)提出的一种算法表明,量子计算机能比经典计算机更加高效地分解大数字,而大数分解正是如今加密标准的基础。
科技云报道
2022/04/14
1.1K0
量子危机下,区块链和加密货币只有死路一条?丨科技云·视角
加密与安全_探索签名算法
在非对称加密中,使用私钥加密、公钥解密确实是可行的,而且有着特定的应用场景,即数字签名。
小小工匠
2024/05/26
2600
密码体制如何应对“量子霸权”?
量子计算是目前全世界范围内的前沿研究热点,并可能正以量子体积每年翻倍的“量子摩尔定律”向前发展。然而,由于量子计算机的强大运算能力,一旦“量子霸权”成为现实,现有密码体制可能发生颠覆性的崩塌。本文就量子计算对现有密码算法的影响进行了分析,并总结了抗量子计算攻击的公钥密码算法的发展现状。
FB客服
2019/12/26
2.9K0
密码体制如何应对“量子霸权”?
【愚公系列】软考高级-架构设计师 012-加密技术和认证技术
加密技术和认证技术是网络安全和数据保护领域的两个核心组成部分。它们都旨在保护数据的安全性和完整性,但各自关注的方面和实现的方式不同。
愚公搬代码
2024/06/08
2130
密码学知识总结
  很喜欢这种开放性题目的作业,每个人可以根据自己的兴趣来选择相应的题目。也是一个锻炼自主学习能力的机会。   学习密码学用图片可以很难直观地展现算法的流程,推荐一本书《图解密码技术》,书中有大量的图片,可以用来入门。
yifei_
2022/11/14
7250
区块链基础知识(上):区块链基本原理、加密哈希、公钥加密
加密哈希的作用是创建一个唯一的指纹或标识,用于表示输入数据。无论输入数据有多大或多小,哈希函数都会生成相同长度的哈希值。这意味着即使输入数据发生微小的改变,生成的哈希值也会完全不同。
苏泽
2024/03/12
2K0
区块链基础知识(上):区块链基本原理、加密哈希、公钥加密
《计算机系统与网络安全》第五章 消息认证与数字签名
消息认证又叫报文认证,是消息的接收者验证消息的真实性和完整性的过程与技术。真实性就是验证消息发送者他是真实的而非假冒的。也就是说假如消息的发送者声称是张三,我们要验证一下这个张三他是否是真的张三,这个又叫做信源鉴别,就是信息的源头鉴别它的真伪。另外还要验证消息的完整性,就是验证消息在传送或者存储过程当中没有被篡改,存放、乱序或者延迟等攻击。这个消息认证是防止主动攻击的重要技术,这个主动攻击主要针对真实性和完整性进行攻击,主要包括假冒,假冒某个合法的实体发送一个消息。另外就是内容修改,对消息的内容进行篡改,包括插入、删除、转换或者修改。还有顺序的修改,对消息的顺序进行修改,因为消息往往可能有多个报文组成,这个时候对消息的顺序进行重新排列,也构成了攻击。即时修改是从时间的角度对消息进行延迟,影响消息的时效性,或者截获了消息之后重新来发送产生重放攻击。
猫头虎
2024/04/08
3950
《计算机系统与网络安全》第五章 消息认证与数字签名
安全基础概述
在当今数字时代,安全至关重要。随着我们越来越依赖技术进行通信、商业活动和数据存储,理解安全基础知识变得必不可少。本文概述了加密、摘要算法和数字签名等关键安全概念,旨在帮助读者保护数字资产,确保信息的完整性和机密性。无论你是技术爱好者还是行业专业人士,本文都将为你揭示保护数字世界的核心机制。
timerring
2025/02/04
990
软考高级软件架构师:数字签名技术概念和例题
数字签名技术是信息安全领域内的一项核心技术,它允许数据的接收者验证数据来源的真实性和数据在传输过程中是否被篡改。数字签名基于公钥密码学原理,使用发送者的私钥进行签名,而接收者则用相应的公钥进行验证。
明明如月学长
2024/05/24
1210
软考高级软件架构师:数字签名技术概念和例题
数据结构之哈希函数
概念: 哈希(hash),也叫做散列、数据摘要等,是一种常见的数据结构。哈希的表的核心概念分为哈希表和哈希函数。 哈希表(hashTable) 哈希表之前讲过,有需要的可以参考:点击打开哈希表 哈希函数 哈希函数就是将某一不定长的对象映射为另一个定长的对象。能够做到这一点的函数有很多,那什么可以作为哈希函数?这里我们首先要明确下什么可以作为哈希函数。 如果两个不同的对象经过哈希函数计算后得到相同的哈希值,则这就是所谓的冲突。冲突会导致很多的异常,说一种极端的情况:如果一个哈希函数的计算记过经常为0,那么它根
xiangzhihong
2018/02/05
1.2K0
数据结构之哈希函数
区块链数据结构
区块链是近年来备受关注的技术,它的出现为数字货币、智能合约等领域带来了革命性的变革,然而区块链的实现并不简单,其中的数据结构是至关重要的一部分。本文将介绍区块链的数据结构,帮助读者更好地理解区块链的运作原理,通过本文的学习,读者将能够更好地理解区块链的本质并为后续的区块链开发及应用打下坚实的基础
Al1ex
2023/08/10
8560
区块链数据结构
揭秘区块链的核心技术之「哈希与加密算法 」
大家都知道,区块链的关键技术组成主要为:P2P网络协议、共识机制、密码学技术、账户与存储模型。而这些技术中,又以 密码学与共识机制 这两点为最核心。那么今天我们来详细的聊一聊密码学,看一看密码学技术是如何在区块链中应用的。
奎哥
2018/08/31
9390
揭秘区块链的核心技术之「哈希与加密算法 」
简单小结密码学入门知识点
  密码,最初的目的是用于对信息加密,计算机领域的密码技术种类繁多。但随着密码学的运用,密码还被用于身份认证、防止否认等功能上。密码是通信双方按约定的法则进行信息特殊变换的一种重要保密手段。依照这些法则,变明文为密文,称为加密变换;变密文为明文,称为脱密变换。密码在早期仅对文字或数码进行加、脱密变换,随着通信技术的发展,对语音、图像、数据等都可实施加、脱密变换。
步履不停凡
2019/08/23
2.4K0
简单小结密码学入门知识点
探索后量子安全:基于格加密技术的未来密码学展望
在信息技术日新月异的今天,量子计算作为下一代计算技术的代表,正逐步从理论走向实践。量子计算的出现对现有的加密体系构成了严重威胁,尤其是基于大数分解和离散对数难题的传统密码学(如RSA和Diffie-Hellman协议)。为了应对这一挑战,科学家们提出了多种抗量子密码学方案,其中基于格的加密(Lattice-based Cryptography)因其独特的优势成为了后量子密码学的重要候选者。
用户11293412
2024/10/09
4330
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
本文由融云技术团队分享,原题“互联网通信安全之端到端加密技术”,内容有较多修订和改动。
JackJiang
2022/08/29
2.3K0
即时通讯安全篇(十一):IM聊天系统安全手段之传输内容端到端加密技术
推荐阅读
相关推荐
后量子聚合签名;后量子聚合签名和MuSig2区别;量子攻击
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 📒1. C语言的输入与输出
  • 📚2. 流是什么
  • 📜3. C++ IO流
    • 🌞C++标准IO流
    • ⭐C++文件IO流
  • 📝4. stringstream
    • 🍁将数值类型数据格式化为字符串
    • 🍂字符串拼接
    • 🌸序列化和反序列化
  • 📖5. 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档