《计算机操作系统》第十二章 - 保护和安全

目录

前言

核心知识点

[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 架构图(可信系统)
代码使用说明
  1. 环境要求:DEV C++(任意版本),编译标准选择「C++98」(DEV C++ 默认支持);
  2. 运行方式:复制对应代码到 DEV C++,直接点击「运行」按钮即可;
  3. 扩展建议:实际项目中,加密算法需使用 OpenSSL 等成熟库,本文代码为入门理解简化实现。

总结

  1. 操作系统安全核心是保障机密性、完整性、可用性,核心手段包括加密、验证、访问控制;
  2. 本文所有代码基于 C++98 标准,适配 DEV C++,可直接运行,覆盖加密、用户验证、攻击检测、可信系统四大核心场景;
  3. 内部攻击和外部攻击的防护重点不同:内部防越权,外部防破解 / DoS,可信系统是安全防护的终极方案。

结尾

如果本文对你理解操作系统的保护和安全有帮助,欢迎点赞 + 收藏!有任何代码运行问题,评论区留言,我会第一时间解答~

相关推荐
xyq20241 小时前
Matplotlib 绘图线
开发语言
小镇敲码人1 小时前
探索CANN框架中TBE仓库:张量加速引擎的优化之道
c++·华为·acl·cann·ops-nn
张登杰踩1 小时前
MCR ALS 多元曲线分辨算法详解
算法
m0_694845571 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
平安的平安1 小时前
面向大模型算子开发的高效编程范式PyPTO深度解析
c++·mfc
June`1 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
春日见1 小时前
如何创建一个PR
运维·开发语言·windows·git·docker·容器
ESBK20251 小时前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
C++ 老炮儿的技术栈1 小时前
VS2015 + Qt 实现图形化Hello World(详细步骤)
c语言·开发语言·c++·windows·qt
YuTaoShao1 小时前
【LeetCode 每日一题】3634. 使数组平衡的最少移除数目——(解法一)排序+滑动窗口
算法·leetcode·排序算法