首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按位与dd的补码?

按位与dd的补码?
EN

Unix & Linux用户
提问于 2013-12-10 17:55:08
回答 3查看 800关注 0票数 0

当安全擦除磁盘时,我如何使用dd进行“位级补足”?(还是使用其他UNIX工具?)

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2013-12-10 18:59:21

我首先要说的是,按位补充磁盘并不是一个安全的擦除,因为如果有人知道您做了什么,他们所要做的就是逆转进程,将磁盘恢复到它原来的状态。

虽然bash有一个补码运算符,但我不认为它可以在这里使用,因为如果没有其他工具,就无法处理原始字节。

下面是一个简短的C程序,它将作为一个按位补充的管道:

代码语言:javascript
运行
复制
#include <stdio.h>
#include <unistd.h>
#include <inttypes.h>

#define BUFSZ 4096

int main (void) {
    unsigned char buffer[BUFSZ];
    int i, check;
    uint64_t total = 0;

    while ((check = read(0, buffer, BUFSZ)) > 0) {
        for (i = 0; i < check; i++) buffer[i] = ~buffer[i];
        write(1, buffer, check);
        total += check;
    }

    fprintf(stderr, "Bitcomp processed %lu bytes.\n", total);
    return 0;
}                     

汇编如下:

代码语言:javascript
运行
复制
gcc whatever.c -o bitcomp

然后:

代码语言:javascript
运行
复制
dd if=something | ./bitcomp | dd of=something conv=notrunc

当写入正在读取的同一文件时,conv=notrunc (不截断)是必需的。你可能不需要它作为一个设备。您还可以使用:

代码语言:javascript
运行
复制
./bitcomp < something 1<> something

其中1<>充当了>的“无截断”版本(谢谢Stephane Chazelas)。注意,程序报告到标准错误(外壳的描述符2),所以不要重定向2>&1等。

如果您想了解我所说的可逆的意思,请在文本文件上运行它,然后在相同的文本文件上再次运行它。它将回到它开始的方式。

票数 3
EN

Unix & Linux用户

发布于 2013-12-10 19:42:07

我想我会跳过尝试用dd自己来做这件事,而去寻找提供这些类型特性的实际工具。我熟悉的4种工具可以这样做:

  • 擦拭
  • 擦拭
  • 切丝
  • BleachBit

在这4种方法中,我想看看nwipe,它有各种各样的方法,可以安全地从磁盘和/或分区擦除数据。我也可能会去看BleachBit。

注意:nwipe可以从ncurses或直接从命令行运行。

摘自nwipe手册页

代码语言:javascript
运行
复制
   -m, --method=METHOD
          The wiping method (default: dodshort).
          dod522022m / dod       - 7 pass DOD 5220.22-M method
          dodshort / dod3pass    - 3 pass DOD method
          gutmann                - Peter Gutmann's Algorithm
          ops2                   - RCMP TSSIT OPS-II
          random / prng / stream - PRNG Stream
          zero / quick           - Overwrite with zeros

您还可以告诉它执行这一操作的次数:

代码语言:javascript
运行
复制
   -r, --rounds=NUM
          Number  of  times  to  wipe the device using the selected method
          (default: 1)

示例

代码语言:javascript
运行
复制
$ nwipe -m dod /dev/sda1

参考资料

位补

如果您查看nwipe的源代码,您会注意到DoD 7和DoD 3方法都是按位补充的。

DoD 7

代码语言:javascript
运行
复制
    char dod [7];

    nwipe_pattern_t patterns [] =
    {
            {  1, &dod[0] }, /* Pass 1: A random character.               */
            {  1, &dod[1] }, /* Pass 2: The bitwise complement of pass 1. */
            { -1, ""      }, /* Pass 3: A random stream.                  */
            {  1, &dod[3] }, /* Pass 4: A random character.               */
            {  1, &dod[4] }, /* Pass 5: A random character.               */
            {  1, &dod[5] }, /* Pass 6: The bitwise complement of pass 5. */
            { -1, ""      }, /* Pass 7: A random stream.                  */
            {  0, NULL   }
    };

DoD 3

代码语言:javascript
运行
复制
    char dod [3];

    nwipe_pattern_t patterns [] =
    {
            {  1, &dod[0] }, /* Pass 1: A random character.               */
            {  1, &dod[1] }, /* Pass 2: The bitwise complement of pass 1. */
            { -1, ""      }, /* Pass 3: A random stream.                  */
            {  0, NULL   }
    };

进一步研究这一点,似乎任何声称做DoD 3或7的软件都会执行这种按位的补充,作为这些特殊擦除方法需要执行的一系列传球的一部分。

票数 4
EN

Unix & Linux用户

发布于 2013-12-10 20:51:04

tr是用于音译字节的工具:

代码语言:javascript
运行
复制
LC_ALL=C tr < file 1<> file '\0-\377' '\377\376\375\374\373\372\371\370\367\366\365\364\363\362\361\360\357\356\355\354\353\352\351\350\347\346\345\344\343\342\341\340\337\336\335\334\333\332\331\330\327\326\325\324\323\322\321\320\317\316\315\314\313\312\311\310\307\306\305\304\303\302\301\300\277\276\275\274\273\272\271\270\267\266\265\264\263\262\261\260\257\256\255\254\253\252\251\250\247\246\245\244\243\242\241\240\237\236\235\234\233\232\231\230\227\226\225\224\223\222\221\220\217\216\215\214\213\212\211\210\207\206\205\204\203\202\201\200\177\176\175\174\173\172\171\170\167\166\165\164\163\162\161\160\157\156\155\154\153\152\151\150\147\146\145\144\143\142\141\140\137\136\135\134\133\132\131\130\127\126\125\124\123\122\121\120\117\116\115\114\113\112\111\110\107\106\105\104\103\102\101\100\77\76\75\74\73\72\71\70\67\66\65\64\63\62\61\60\57\56\55\54\53\52\51\50\47\46\45\44\43\42\41\40\37\36\35\34\33\32\31\30\27\26\25\24\23\22\21\20\17\16\15\14\13\12\11\10\7\6\5\4\3\2\1\0'

或者:

代码语言:javascript
运行
复制
LC_ALL=C tr < file 1<> file '\0-\377'  "$(awk '
  BEGIN{for (i=0;i<256;i++) printf "\\%o", 255-i}')"

但正如其他人所指出的那样,作为一个安全的擦除,这是没有意义的。首先,它不安全,因为原始数据很容易派生,然后从性能的角度来看,旋转存储效率很低,因为需要读取数据,然后需要查找来重写数据。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/104585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档