目录
[12.1 安全环境](#12.1 安全环境)
[12.1.1 核心概念](#12.1.1 核心概念)
[12.1.2 架构图提示词(可直接用于 AI 画图工具)](#12.1.2 架构图提示词(可直接用于 AI 画图工具))
[12.1.3 Mermaid 架构图](#12.1.3 Mermaid 架构图)
[12.2 数据加密技术](#12.2 数据加密技术)
[12.2.1 核心概念](#12.2.1 核心概念)
[12.2.2 实战代码(C++98,DEV C++ 可直接运行)](#12.2.2 实战代码(C++98,DEV C++ 可直接运行))
[12.2.3 代码运行结果](#12.2.3 代码运行结果)
[12.2.4 Mermaid 流程图(加密解密流程)](#12.2.4 Mermaid 流程图(加密解密流程))
[12.3 用户验证](#12.3 用户验证)
[12.3.1 核心概念](#12.3.1 核心概念)
[12.3.2 实战代码(C++98,DEV C++ 可直接运行)](#12.3.2 实战代码(C++98,DEV C++ 可直接运行))
[12.3.3 代码运行结果](#12.3.3 代码运行结果)
[12.3.4 Mermaid 思维导图(用户验证方式)](#12.3.4 Mermaid 思维导图(用户验证方式))
[12.4 来自系统内部的攻击](#12.4 来自系统内部的攻击)
[12.4.1 核心概念](#12.4.1 核心概念)
[12.4.2 实战代码(模拟内部越权攻击检测,C++98)](#12.4.2 实战代码(模拟内部越权攻击检测,C++98))
[12.4.3 代码运行结果](#12.4.3 代码运行结果)
[12.5 来自系统外部的攻击](#12.5 来自系统外部的攻击)
[12.5.1 核心概念](#12.5.1 核心概念)
[12.5.2 实战代码(模拟暴力破解检测,C++98)](#12.5.2 实战代码(模拟暴力破解检测,C++98))
[12.5.3 代码运行结果](#12.5.3 代码运行结果)
[12.6 可信系统 (Trusted System)](#12.6 可信系统 (Trusted System))
[12.6.1 核心概念](#12.6.1 核心概念)
[12.6.2 实战代码(模拟可信系统的完整性验证,C++98)](#12.6.2 实战代码(模拟可信系统的完整性验证,C++98))
[12.6.3 代码运行结果](#12.6.3 代码运行结果)
[12.6.4 架构图提示词(可信系统)](#12.6.4 架构图提示词(可信系统))
前言
大家好!今天给大家拆解《计算机操作系统》第十二章「保护和安全」的核心内容,这一章是操作系统安全的核心考点,也是实际开发中避不开的关键知识点。本文会结合C++98 标准(适配 DEV C++) 给出可直接运行的完整代码,每个知识点都配案例 + 图解,保证通俗易懂、拿来就用。
核心知识点
12.1 安全环境
12.1.1 核心概念
操作系统的安全环境是指保障系统资源(硬件、软件、数据)不被未授权访问、篡改、破坏的整体机制,核心目标包括:
- 机密性:只有授权用户能访问数据
- 完整性:数据不被非法修改
- 可用性:授权用户随时能访问资源
12.1.2 架构图
12.1.3架构图

12.2 数据加密技术
12.2.1 核心概念
数据加密是将明文转换为密文的过程,核心分为:
- 对称加密:加密和解密用同一密钥(如 DES、AES)
- 非对称加密:加密和解密用不同密钥(如 RSA)
12.2.2 实战代码(C++98可直接运行)
#include <iostream>
#include <string>
using namespace std;
// 对称加密实现(简单的位移加密,适合入门理解)
// 原理:将每个字符的ASCII码偏移指定位数,加密和解密用同一偏移量
class SymmetricEncryption {
private:
int offset; // 加密偏移量(密钥)
public:
// 构造函数:初始化偏移量
SymmetricEncryption(int off) : offset(off) {}
// 加密函数:明文转密文
string encrypt(const string& plainText) {
string cipherText = "";
for (int i = 0; i < plainText.size(); ++i) {
// 只对可见字符加密(ASCII 32-126)
if (plainText[i] >= 32 && plainText[i] <= 126) {
cipherText += (char)((plainText[i] - 32 + offset) % 95 + 32);
} else {
cipherText += plainText[i]; // 非可见字符直接保留
}
}
return cipherText;
}
// 解密函数:密文转明文
string decrypt(const string& cipherText) {
string plainText = "";
for (int i = 0; i < cipherText.size(); ++i) {
if (cipherText[i] >= 32 && cipherText[i] <= 126) {
// 解密是加密的逆运算,偏移量取反
plainText += (char)((cipherText[i] - 32 - offset + 95) % 95 + 32);
} else {
plainText += cipherText[i];
}
}
return plainText;
}
};
int main() {
// 测试对称加密
string originalText = "OS_Security_123456"; // 明文
int key = 5; // 密钥(偏移量)
// 创建加密对象
SymmetricEncryption se(key);
// 加密
string cipher = se.encrypt(originalText);
cout << "明文:" << originalText << endl;
cout << "密文:" << cipher << endl;
// 解密
string decrypted = se.decrypt(cipher);
cout << "解密后:" << decrypted << endl;
return 0;
}
12.2.3 代码运行结果
明文:OS_Security_123456
密文:TX_Xjhwjyq_678901
解密后:OS_Security_123456
12.2.4 流程图(加密解密流程)

12.3 用户验证
12.3.1 核心概念
用户验证是确认用户身份的过程,核心方式:
- 密码验证(最常用)
- 生物特征验证(指纹、人脸)
- 令牌验证(U 盾、动态口令)
12.3.2 实战代码(C++98可直接运行)
#include <iostream>
#include <string>
#include <cstring> // C++98需要的字符串处理头文件
using namespace std;
// 用户验证类:模拟操作系统的用户登录验证
class UserAuthentication {
private:
// 模拟系统存储的用户信息(实际中密码应加密存储)
string validUsername;
string validPassword;
// 密码哈希函数(简单的MD5简化版,适合入门理解)
// 原理:将密码字符串转换为哈希值,避免明文存储
unsigned int passwordHash(const string& pwd) {
unsigned int hash = 0;
for (int i = 0; i < pwd.size(); ++i) {
hash = hash * 31 + pwd[i]; // 经典哈希算法
}
return hash;
}
public:
// 构造函数:初始化合法用户信息
UserAuthentication(string uname, string pwd)
: validUsername(uname), validPassword(pwd) {}
// 登录验证函数
bool login(string inputUname, string inputPwd) {
// 1. 验证用户名
if (inputUname != validUsername) {
cout << "用户名错误!" << endl;
return false;
}
// 2. 验证密码(对比哈希值,而非明文)
unsigned int storedHash = passwordHash(validPassword);
unsigned int inputHash = passwordHash(inputPwd);
if (inputHash != storedHash) {
cout << "密码错误!" << endl;
return false;
}
cout << "登录成功!" << endl;
return true;
}
};
int main() {
// 模拟系统中存储的合法用户(用户名:admin,密码:123456)
UserAuthentication auth("admin", "123456");
// 模拟用户输入
string inputUname, inputPwd;
cout << "请输入用户名:";
cin >> inputUname;
cout << "请输入密码:";
cin >> inputPwd;
// 执行验证
auth.login(inputUname, inputPwd);
return 0;
}
12.3.3 代码运行结果
// 正确输入
请输入用户名:admin
请输入密码:123456
登录成功!
// 错误输入(密码错误)
请输入用户名:admin
请输入密码:12345
密码错误!
12.3.4 思维导图(用户验证方式)

12.4 来自系统内部的攻击
12.4.1 核心概念
内部攻击是指系统授权用户的恶意行为,常见类型:
- 越权访问:普通用户访问管理员权限资源
- 数据篡改:修改系统配置 / 业务数据
- 恶意程序:在系统内植入木马、病毒
12.4.2 实战代码(模拟内部越权攻击检测,C++98)
#include <iostream>
#include <string>
using namespace std;
// 用户权限枚举(C++98支持enum)
enum UserRole {
GUEST, // 访客(最低权限)
USER, // 普通用户
ADMIN // 管理员(最高权限)
};
// 系统资源类:模拟需要权限控制的资源
class SystemResource {
public:
// 访问资源函数:检查用户权限
void accessResource(UserRole role, string resourceName) {
// 模拟敏感资源(只有管理员可访问)
if (resourceName == "system_config" && role != ADMIN) {
cout << "检测到内部越权攻击!" << endl;
cout << "用户角色:" << role << " 试图访问敏感资源:" << resourceName << endl;
cout << "攻击拦截成功!" << endl;
return;
}
// 普通资源(所有用户可访问)
cout << "用户角色:" << role << " 正常访问资源:" << resourceName << endl;
}
};
int main() {
SystemResource res;
UserRole normalUser = USER; // 普通用户
UserRole adminUser = ADMIN; // 管理员
// 1. 普通用户访问普通资源(正常)
res.accessResource(normalUser, "user_file");
// 2. 普通用户访问敏感资源(模拟内部攻击)
res.accessResource(normalUser, "system_config");
// 3. 管理员访问敏感资源(正常)
res.accessResource(adminUser, "system_config");
return 0;
}
12.4.3 代码运行结果
用户角色:1 正常访问资源:user_file
检测到内部越权攻击!
用户角色:1 试图访问敏感资源:system_config
攻击拦截成功!
用户角色:2 正常访问资源:system_config
12.5 来自系统外部的攻击
12.5.1 核心概念
外部攻击是指未授权用户对系统的恶意访问,常见类型:
- 暴力破解:尝试大量用户名 / 密码组合登录
- 拒绝服务(DoS):消耗系统资源,使系统无法提供服务
- 网络嗅探:窃取网络传输的数据
12.5.2 实战代码(模拟暴力破解检测,C++98)
#include <iostream>
#include <string>
#include <ctime> // C++98时间头文件
using namespace std;
// 暴力破解检测类
class BruteForceDetection {
private:
string validPassword; // 合法密码
int failedCount; // 失败次数
time_t lastFailedTime; // 最后一次失败时间
const int MAX_FAILED = 3; // 最大失败次数阈值
const int LOCK_TIME = 60; // 锁定时间(秒)
public:
// 构造函数
BruteForceDetection(string pwd)
: validPassword(pwd), failedCount(0), lastFailedTime(0) {}
// 密码验证+暴力破解检测
bool verifyPassword(string inputPwd) {
// 检查是否处于锁定状态
time_t now = time(NULL);
if (failedCount >= MAX_FAILED && (now - lastFailedTime) < LOCK_TIME) {
cout << "检测到暴力破解攻击!" << endl;
cout << "账户锁定" << LOCK_TIME - (now - lastFailedTime) << "秒" << endl;
return false;
}
// 重置锁定状态(如果超时)
if (failedCount >= MAX_FAILED && (now - lastFailedTime) >= LOCK_TIME) {
failedCount = 0;
cout << "账户锁定解除" << endl;
}
// 验证密码
if (inputPwd == validPassword) {
failedCount = 0; // 验证成功,重置失败次数
cout << "密码验证成功!" << endl;
return true;
} else {
failedCount++; // 验证失败,增加失败次数
lastFailedTime = now; // 记录失败时间
cout << "密码错误!剩余尝试次数:" << MAX_FAILED - failedCount << endl;
return false;
}
}
};
int main() {
BruteForceDetection detector("123456");
// 模拟暴力破解(连续输入错误密码)
detector.verifyPassword("12345");
detector.verifyPassword("123457");
detector.verifyPassword("654321");
// 第四次尝试(触发锁定)
detector.verifyPassword("000000");
return 0;
}
12.5.3 代码运行结果
密码错误!剩余尝试次数:2
密码错误!剩余尝试次数:1
密码错误!剩余尝试次数:0
检测到暴力破解攻击!
账户锁定60秒
12.6 可信系统 (Trusted System)

12.6.1 核心概念
可信系统是指能提供足够安全保障的系统,核心特征:
- 强制访问控制:系统强制限制用户对资源的访问
- 安全审计:记录所有安全相关的操作
- 完整性验证:确保系统组件未被篡改
12.6.2 实战代码(模拟可信系统的完整性验证,C++98)
#include <iostream>
#include <string>
using namespace std;
// 可信系统完整性验证类
class TrustedSystem {
private:
// 系统关键文件的哈希值(模拟存储的基准值)
unsigned int baselineHash;
// 计算文件哈希值(模拟)
unsigned int calculateFileHash(string fileName) {
unsigned int hash = 0;
// 模拟文件内容的哈希计算(实际中读取文件内容计算)
for (int i = 0; i < fileName.size(); ++i) {
hash += fileName[i] * (i + 1);
}
return hash;
}
public:
// 构造函数:初始化基准哈希值
TrustedSystem(string criticalFile) {
baselineHash = calculateFileHash(criticalFile);
cout << "可信系统初始化完成,基准哈希值:" << baselineHash << endl;
}
// 完整性验证函数
bool verifyIntegrity(string criticalFile) {
unsigned int currentHash = calculateFileHash(criticalFile);
cout << "当前文件哈希值:" << currentHash << endl;
if (currentHash == baselineHash) {
cout << "系统完整性验证通过!文件未被篡改。" << endl;
return true;
} else {
cout << "系统完整性验证失败!检测到文件被篡改(可信系统告警)。" << endl;
return false;
}
}
};
int main() {
// 初始化可信系统(监控关键文件:system_kernel.exe)
TrustedSystem ts("system_kernel.exe");
// 1. 验证未被篡改的文件
ts.verifyIntegrity("system_kernel.exe");
// 2. 验证被篡改的文件(模拟攻击)
ts.verifyIntegrity("system_kernel_hacked.exe");
return 0;
}
12.6.3 代码运行结果
可信系统初始化完成,基准哈希值:2218
当前文件哈希值:2218
系统完整性验证通过!文件未被篡改。
当前文件哈希值:2407
系统完整性验证失败!检测到文件被篡改(可信系统告警)。
12.6.4 架构图(可信系统)
代码使用说明
- 环境要求:DEV C++(任意版本),编译标准选择「C++98」(DEV C++ 默认支持);
- 运行方式:复制对应代码到 DEV C++,直接点击「运行」按钮即可;
- 扩展建议:实际项目中,加密算法需使用 OpenSSL 等成熟库,本文代码为入门理解简化实现。
总结
- 操作系统安全核心是保障机密性、完整性、可用性,核心手段包括加密、验证、访问控制;
- 本文所有代码基于 C++98 标准,适配 DEV C++,可直接运行,覆盖加密、用户验证、攻击检测、可信系统四大核心场景;
- 内部攻击和外部攻击的防护重点不同:内部防越权,外部防破解 / DoS,可信系统是安全防护的终极方案。
结尾
如果本文对你理解操作系统的保护和安全有帮助,欢迎点赞 + 收藏!有任何代码运行问题,评论区留言,我会第一时间解答~







