要在shmget中用作密钥的安全值
Safe values to be used as key in shmget
我使用shmget在Linux上的项目进程之间共享数据。
int shmget(key_t key, size_t size, int shmflg);
然而,任何其他程序也可以调用shmget,因此可能会导致密钥冲突(因为我使用常量作为调用shmgot的密钥,所以我必须使用常量而不是生成的密钥,因为横向进程是单独构建和运行的)。
在shmget中用作密钥的安全值应该是什么?
没有安全值,您(以及其他创建共享段的进程)应该使用IPC_EXCL
来确保没有冲突。然而,后者应该确保其他程序不会开始写入您的片段(除非它们写得很糟糕)。
你可以尝试在ftok()中建立你的"私有"密钥常量,但你知道这不安全。如果你与某个东西发生冲突,你将无法告诉你的程序这不是正确的密钥。还要记住:
只有CCD_ 2的低阶8位是有效的。如果这些位为0,则未指定ftok()的行为。
换句话说,不要在那里传递0
;)。
在任何情况下,您都应该认真地考虑创建一些沟通渠道。服务器用id写一个文件就足够了,然后由其他程序读取。
根据其他想法,您可以尝试将服务器PID作为id
传递,如果其他进程至少可以这样做的话。这样可以让它更安全一些。
我建议您使用POSIX shm_open
(与mmap
一起使用),只要您不使用与其他软件相同的命名区域,它就不会存在与ftok
冲突的问题。
相关文章:
- SSH通过/sbin/SSH无法读取RSA密钥文件(从控制台运行)
- 允许从 std::map 的密钥窃取资源?
- TMap::Emplace() 在应用现有密钥时会覆盖吗?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 如何修复无效的API密钥,IP或操作权限错误?
- 所有可能的链接生成器与64位密钥
- 如何在unordered_map中更改密钥?
- 获取当前密钥状态?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 将密钥发送到非前台的游戏窗口
- 有哪些方法可以对基于 256 位密钥的矩阵进行加扰?
- 如何在精灵表上的两个不同部分之间来回切换,同时用户仍使用 SFML 持有密钥
- 如何将CNG密钥转换为OpenSSL EVP_PKEY(反之亦然)?
- 运行密钥密码解密知道密钥?
- std::unordered_map 运算符 [] 是否对非现有密钥进行零初始化?
- 封装 std::map 以允许迭代,但没有直接密钥访问?
- 如果我使用同一个密钥推送用户数据两次,会发生什么
- 如何在C++中创建自己的编译密钥
- 如何使用 Windows 本机 Wifi 功能连接到请求网络安全密钥的 Wifi
- CURL SSH密钥密码安全