gpt4 book ai didi

c - 删除硬盘时 "Verifies the write"是什么意思?

转载 作者:行者123 更新时间:2023-11-30 15:02:13 24 4
gpt4 key购买 nike

我正在查看一些用于(安全)删除硬盘的代码。我注意到在查看不同的方法(Infosec 5DoD 5220.22-M 等)时,我读到了“验证写入”。

示例:

https://www.lifewire.com/dod-5220-22-m-2625856

Pass 3: Writes a random character and verifies the write

https://en.wikipedia.org/wiki/Infosec_Standard_5#cite_note-5

Regardless of which level is used, verification is needed to ensure that overwriting was successful.

我的问题是,它的技术含义是什么?

  1. 您是否只在写入数据 block 时检查写入的字节是否等于 block 的大小(看起来很快)?

  2. 您是否读回您写入的 block 并进行比较(memcmp?)是否与写入的数据 block 完全相同?

  3. 我忽略了任何其他解决方案吗?

这里有一些示例代码来说明我的问题。哪种解决方案会指示“写入时验证”?如果您只检查返回值(来自write),就可以您确定,因为 long 与所有字节所在的 block 的长度匹配确实写了?

// erasure example
// erasure single block, start from 0

// block size
unsigned long block_size = 512;

// data-block we will write
char block[block_size];

// zero the block
bzero(&block, block_size);

// open device
int fd = open('/dev/sdb', O_RDWR);

// write 1st block
int bytes_written = write(fd, &block, block_size);

// verify option: A
if (bytes_written == block_size) {
// all good
}

// verify option B
// go back the number of bytes-wtitten from the current pos.
lseek(fd, -1 * bytes_written);
// read the same number of bytes
int bytes_read = read(fd, &block, bytes_written);

// should be same
if (bytes_read == bytes_written) {
// here code to check i block indeed contains zero's
// use memcmp ?
}

最佳答案

删除硬盘时“验证写入”是什么意思?

来自 Here

The write(...) function attempts to write nbytes from buffer to the file associated with handle. On text files, it expands each LF to a CR/LF.

The function returns the number of bytes written to the file. A return value of -1 indicates an error, with errno set appropriately.

所以在你的例子中,int bytes_written = write(fd, &block, block_size);bytes_writing 的值,如果等于 block 大小,验证 block 的所有内存位置都已写入。

并回答您的其他问题:

  • (1) 无论如何,始终检查非 void 函数的返回值,并且通过简单地执行两个 int 的比较不会造成显着的效率或速度损失。值(value)观。您甚至可以一步完成,但我不确定这是否会提高效率(查看程序集即可确定)。所以代替:

    // verify option: A<br/>
    if (bytes_written == block_size)
    {
    // all good
    }

    //您可以在同一行中进行比较:

    if(write(fd, &block, block_size) == block_size) { // all good }

  • (2) 可选.. 它提供内存块包含新内容的额外验证

您可以在 this Linux man page 中找到 write() 的更详细说明。

关于c - 删除硬盘时 "Verifies the write"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41141476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com