Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按位与dd的补码?

按位与dd的补码?
EN

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

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

EN

回答 3

Unix & Linux用户

回答已采纳

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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
代码运行次数:0
运行
AI代码解释
复制
gcc whatever.c -o bitcomp

然后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dd if=something | ./bitcomp | dd of=something conv=notrunc

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bitcomp < something 1<> something

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

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

票数 3
EN

Unix & Linux用户

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

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

  • 擦拭
  • 擦拭
  • 切丝
  • BleachBit

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

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

摘自nwipe手册页

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   -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
代码运行次数:0
运行
AI代码解释
复制
   -r, --rounds=NUM
          Number  of  times  to  wipe the device using the selected method
          (default: 1)

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ nwipe -m dod /dev/sda1

参考资料

位补

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

DoD 7

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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
代码运行次数:0
运行
AI代码解释
复制
    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 12:51:04

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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

复制
相关文章
逻辑与(&&)、逻辑或(||)、按位与(&)、按位或(|)、按位异或(^)、按位取反(~)
运算符两边的表达式的值都为false运算结果为false, 其余情况为true。
全栈程序员站长
2022/09/06
1.6K0
为什么补码是按位取反加一_补码为什么加1
首先,阅读这篇文章的你,肯定是一个在网上已经纠结了很久的读者,因为你查阅了所有你能查到的资料,然后他们都会很耐心的告诉你,补码:就是按位取反,然后加一。准确无误,毫无破绽。但是,你搜遍了所有俯拾即是而且准确无误的答案,却仍然选择来看这篇毫不起眼的文章,原因只有一个,只因为你还没有得到你想要的东西。
全栈程序员站长
2022/09/22
7071
mysql 按位取反_按位与,按位异或,按位取反「建议收藏」
PHP按位与或 (^ 、&)运算也是很常用的逻辑判断类型,有许多的PHP新手们或许对此并不太熟悉,今天结合一些代码对PHP与或运算做些介绍,先说明下,在PHP中,按位与主要是对二进制数操作:
全栈程序员站长
2022/09/22
2.3K0
按位与、按位异或、按位取反「建议收藏」
& 按位与 | 按位或 ^ 按位异或 1. 按位与运算 按位与运算符”&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。 按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 , 保留低八位, 可作 a&255 运算 ( 255 的二进制数为0000000011111111)。 main(){ int a=9,b=5,c; c=a&b; printf(“a=%d/nb=%d/nc=%d/n”,a,b,c); } 2. 按位或运算 按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。 例如:9|5可写算式如下: 00001001|00000101 00001101 (十进制为13)可见9|5=13 main(){ int a=9,b=5,c; c=a|b; printf(“a=%d/nb=%d/nc=%d/n”,a,b,c); } 3. 按位异或运算 按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下: 00001001^00000101 00001100 (十进制为12) main(){ int a=9; a=a^15; printf(“a=%d/n”,a); }
全栈程序员站长
2022/09/06
2.2K0
java按位取反运算符_java源码补码
一直纠结于位运算中的 按位取反 以及原码、反码、补码之间的各种关系,反正各种混淆各种懵逼。经过一小段时间才弄明白这个别人觉得很容易的问题。可能还是我基础不太好。
全栈程序员站长
2022/09/21
8100
按位取反~运算_按位与按位或按位异或运算符
这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生疑问,为什么11110110表示-10而不是503?理解按位取反的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。
全栈程序员站长
2022/09/22
1.7K0
C/运算符(按位与、按位或、按位异或)
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
用户10788736
2023/10/16
2.1K0
C/运算符(按位与、按位或、按位异或)
按位取反运算符的运算举例_按位与按位或按位异或运算符
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170462.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/21
1.1K0
数字范围按位与
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。
狼啸风云
2023/12/18
1220
数字范围按位与
位运算-补码那些事
原码:计算机中对数字的二进制定点表示方法,这种表示方法在数字前面加上一个符号位,“1”代表这个数是负数,“0”代表这个数是正数,除符号位之外,其余位表示该数字的值。(注意:如果明确定义为无符号整数,那么将不存在符号位,本文主要讲述的是有符号整数的情况)
玛卡bug卡
2022/09/21
9880
位运算-补码那些事
补码浮点数运算(设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。)
题目描述:设数的阶码为3位,尾数为6位(均不包括符号位)按机械补码浮点运算规则完成下列[x+y]补运算。
GeekLiHua
2025/01/21
800
~按位取反_按位取反什么意思
二进制 0000 0000 0000 0000 0000 0000 0000 0000
全栈程序员站长
2022/09/21
1K0
反码补码和位运算
三者是计算机存储数据的不同形式,计算机用补码存储数据。而且计算机利用这三者可以用加法实现减法
晚上没宵夜
2020/04/24
6610
c语言中按位异或运算_c语言按位与怎么算
备注 表达式可以是其他“与”表达式,或(遵循下面所述的类型限制)相等表达式、关系表达式、加法表达式、乘法表达式、指向成员的指针表达式、强制转换表达式、一元表达式、后缀表达式或主表达式。 按位“与”运算符 (&) 会将第一操作数的每一位与第二操作数的相应位进行比较。如果两个位均为 1,则对应的结果位将设置为 1。否则,将对应的结果位设置为 0。 按位“与”运算符的两个操作数必须为整型。 算术转换中所述的常用算术转换将应用于操作数。 & 的运算符关键字
全栈程序员站长
2022/11/18
2.8K0
按位取反怎么运算_按位取反运算
要弄懂这个运算符的计算方法,首先必须明白二进制数在内存中的存放形式,二进制数在内存中是以补码的形式存放的。
全栈程序员站长
2022/08/03
2.1K0
按十进制位与运算
方法1:对程序员来说最简单的是,让游戏策划把所有5级装备都配置在表格里,他们的解锁关卡都是10234567;
用户1396155
2018/08/02
5970
LeetCode 201. 数字范围按位与(位运算)
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
Michael阿明
2020/07/13
1.1K0
LeetCode 201. 数字范围按位与(位运算)
[PHP] 按位与& 或| 异或^ 的日常使用
按位与: 0&0=0; 0&1=0; 1&0=0; 1&1=1; 按位或: 0|0=0; 0|1=1; 1|0=1; 1|1=1; 按位异或,在或的基础上1 1也为0: 0^0=0; 0^1=1; 1^0=1; 1^1=0;
唯一Chat
2019/09/10
1.1K0
按位取反操作_按位取反末尾加一
编程时: ~1 输出结果为 -2 ,~(-5)的输出结果为 4,很是疑惑,通过查阅资料终于明白。
全栈程序员站长
2022/09/21
9370
c++中按位取反_取反和按位取反
转载于:https://www.cnblogs.com/xrcun/archive/2012/12/01/2797061.html
全栈程序员站长
2022/09/21
1.4K0

相似问题

fstrim如何与dd交互?

10

dd写与读性能

30

dd“直接”与“无缓存”

10

1:1副本与dd

20

获取ls命令结果的补码。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文