小编vaa*_*aab的帖子

我们如何从python访问PY_SSIZE_T_MAX值?

我在python代码中,需要检查一些值PY_SSIZE_T_MAX(在python的C-API中定义)。

我可以PY_SSIZE_T_MAX直接获得价值吗?如果没有,由于python的行为,有没有办法推断它?还是我可以安全地从中推断出来sizeof(ctypes.c_ssize_t)(我正在考虑的价值:)2**(8 * sizeof(c_ssize_t) - 1)

python ctypes c-api

4
推荐指数
1
解决办法
334
查看次数

为什么我们不应该在非对称加密系统中使用私钥加密?

在非对称密码系统的标准使用中,使用公钥进行加密,使用私钥进行解密.

反过来,"使用私钥加密"称为"签名".

尽管术语和缺乏直接工具,标准工具允许实现使用私钥进行加密的加密系统.

任何人都可以清楚地解释为什么这样的解决方

用户案例:

考虑到Alice想以非传统的方式向Bob发送一些东西:

爱丽丝和鲍勃见过面,爱丽丝给了鲍勃一张她创建的私钥生成的"公钥",但她警告鲍勃要保守秘密.她一直保密私钥,并没有把公钥给别人.

Bob可以确定他从Alice收到的消息(如果这些消息是由Alice私钥加密的)只能由他读取(假设他真的保留了他的Alice公钥密钥的副本)吗?

而如何比较这种加密坚固的传统方式,这将在我们的情况下,被鲍勃发送消息给Alice(由Alice的公钥加密的)?

问题是什么

非对称密钥被命名为"私有"和"公共"的事实无助于理解我的问题.密钥具有基础属性,它是我广播"公钥",赋予它"公共"属性.请在回答之前明确区分:我不考虑这些密钥的"公共"和"私有"属性,而是"私钥"加密与"公钥"加密的可靠性.

即使在这种特殊情况下它具有误导性,我也不能使用其他术语.

我知道这种情况是非传统的,并且可能导致一些不一致,或者不是非对称加密系统的问题,因为Bob和Alice在这里分享某种共同的秘密,而这不是不对称加密的重点.

我看到了几个Stackoverflow答案,表明"私钥"和"公钥"是可交换的(只需阅读下面的答案).这不是真正的RSA,因为它是微不足道的生成密钥的公共密钥,这保证不会是倒过来计算是可行的.对于非信徒,使用RSA在openssl中生成密钥的过程是:

  1. 生成一个密钥
  2. 从密钥中提取公钥.

如果有"私用密钥"和"公共密钥"之间这么大的差异,有没有与传统的"公共密钥"加密"私钥"加密之间的坚固区别?

长期选择答案的简短回答

对"私钥"究竟是什么的误解并没有帮助我."私钥"有两种不同的定义."实用私钥"和"理论私钥".

RSA理论的理论私钥与公钥共享数学对称性:

  • 你不能从另一个中推断出一个
  • 加密在任何一种方式都同样可靠

来自RSA工具的实用私钥(如openssl)包含了出于效率原因的附加信息,通常,公钥的一部分甚至按惯例设置.这些假设打破了对称性:

  • 从"实用私钥"获取公钥是微不足道的
  • 但加密仍然同样坚实

有关更多详细信息,请参阅所选答案!如果误解仍然存在,请评论......

编辑说明:

  • 非对称加密系统密钥对经常被宣传为可交换(即使在当前的堆栈溢出答案中),我试图引起反思这可能是危险的误解,因为在REAL生活工具中并非如此.
  • 添加了用户案例,我希望这会澄清我的问题
  • 添加了最终的"简答题"

security signing encryption-asymmetric

3
推荐指数
2
解决办法
1281
查看次数

如何查找包含包含给定字符串的文件的树的提交SHA1

这种情况是:我在我的git存储库中丢失了一些工作,这项工作曾经被提交过,但现在已经埋没在我的历史中,某些地方可能无法通过'git log --all'访问.我唯一能记住的是一些不同的字符串,可以确定一个文件,这是我工作的一部分.

我有一个解决方案......但它很长,你有更好的解决方案吗?

这是我的解决方案:

我已经设法通过批处理命令找到我的提交SHA1:

  • 首先在.git/objects中查找所有'blob'对象,'git cat'ing它们(并使用grep)来查找包含我的文件的blob的SHA1.
  • 然后我不得不解析所有'树'对象以找到包含文件的SHA1的对象...直到包含在其他'树'对象中的树对象.
  • 最终解析包含此根树的所有提交.

git grep commit

2
推荐指数
1
解决办法
2788
查看次数

从NUL分离的输入中填充bash数组

我想从NUL分离的输入(来自stdin)创建一个bash数组.

这是一个例子:

## Let define this for clarity
$ hd() { hexdump -v -e '/1 "%02X "'; echo ;}
$ echo -en "A B\0C\nD\0E\0" | hd
41 20 42 00 43 0A 44 00 45 00
Run Code Online (Sandbox Code Playgroud)

所以这是我的意见.

现在,如果不使用-aof read命令,使用NUL可以正常工作:

$ while read -r -d '' v; do echo -n "$v" | hd; done < <(echo -en "A B\0C\nD\0E\0")
41 20 42 
43 0A 44 
45 
Run Code Online (Sandbox Code Playgroud)

我们得到了正确的价值观.但我无法使用-a以下方法存储这些值:

$ read -r -d '' -a arr < <(echo …
Run Code Online (Sandbox Code Playgroud)

arrays bash stdin nul

2
推荐指数
1
解决办法
136
查看次数

如何获得最小的ocamlopt编译本机二进制文件?

看到一个简单的程序,例如:

print_string "Hello world !\n";
Run Code Online (Sandbox Code Playgroud)

当通过ocamlopt一些非常激进的选项(使用musl)静态编译为本机代码时,在我的系统上仍约为190KB。

$ ocamlopt.opt -compact -verbose -o helloworld \
    -ccopt -static \
    -ccopt -s \
    -ccopt -ffunction-sections \
    -ccopt -fdata-sections \
    -ccopt -Wl \
    -ccopt -gc-sections \
    -ccopt -fno-stack-protector \
    helloworld.ml && { ./helloworld ; du -h helloworld; }
+ as -o 'helloworld.o' '/tmp/camlasm759655.s'
+ as -o '/tmp/camlstartupfc4271.o' '/tmp/camlstartup5a7610.s'
+ musl-gcc -Os -o 'helloworld'   '-L/home/vaab/.opam/4.02.3+musl+static/lib/ocaml' -static -s -ffunction-sections -fdata-sections -Wl -gc-sections -fno-stack-protector '/tmp/camlstartupfc4271.o' '/home/vaab/.opam/4.02.3+musl+static/lib/ocaml/std_exit.o' 'helloworld.o' '/home/vaab/.opam/4.02.3+musl+static/lib/ocaml/stdlib.a' '/home/vaab/.opam/4.02.3+musl+static/lib/ocaml/libasmrun.a' -static  -lm 
Hello world ! …
Run Code Online (Sandbox Code Playgroud)

size executable ocaml compilation minimum

2
推荐指数
1
解决办法
76
查看次数