小编Thu*_*ght的帖子

git 签名提交和 user.signingkey 选项的内部工作原理是什么?

我了解基本加密、ssh 密钥和证书。在配置签名 git 提交时,我遇到了https://docs.github.com/en/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key

\n

我使用ssh密钥进行签名,因此根据文档:

\n
$ git config --global user.signingkey /PATH/TO/.SSH/KEY.PUB\n
Run Code Online (Sandbox Code Playgroud)\n

这就是我感到困惑的地方,为什么我们要用公钥签名,这不是公开的吗?根据我的说法,它应该使用我们本地存储的私钥对提交进行签名,然后无论我们在哪里存储公钥(GitHub、GitLab 等),他们都会使用公钥解密此签名以验证签名。

\n

我确信我在幕后遗漏了一些东西,到底发生了什么?我推测它仅使用私钥进行签名,但要求ssh-agent使用相应的私钥进行签名。

\n

我认为我的想法是正确的:\n来自https://git-scm.com/docs/git-config#Documentation/git-config.txt-usersigningKey

\n
\n

如果 git-tag[1] 或 git-commit[1] 在创建签名标签或提交时没有选择您希望自动选择的密钥,您可以使用此变量覆盖默认选择。此选项不变地传递给 gpg\xe2\x80\x99s --local-user 参数,因此您可以使用 gpg 支持的任何方法指定密钥。如果 gpg.format 设置为 ssh,则这可以包含您的 ssh 私钥或使用 ssh-agent 时的公钥的路径。或者,它可以包含直接以 key:: 为前缀的公钥(例如:“key::ssh-rsa XXXXXX 标识符”)。私钥需要通过 ssh-agent 获取。如果没有设置,git 将调用 gpg.ssh.defaultKeyCommand (例如:“ssh-add -L”)并尝试使用第一个可用的密钥。为了向后兼容,以“ssh-”开头的原始密钥(例如“ssh-rsa XXXXXX 标识符”)被视为“key::ssh-rsa XXXXXX 标识符”,但不推荐使用这种形式;请使用 key:: 形式代替。

\n
\n

git ssh sign

8
推荐指数
1
解决办法
560
查看次数

为什么 lambda 表达式中使用的变量应该是最终变量或有效最终变量

这个问题之前已经在这里被问过\n
\n我的问题为什么在这里得到回答\n
\n但是我对答案有一些疑问。\n提供的答案提到-

\n
\n
\n

尽管其他答案证明了该要求,但它们没有解释该要求存在的原因。

\n
\n
\n
\n

JLS 在\xc2\xa715.27.2中提到了原因:

\n
\n
\n
\n

对有效最终变量的限制禁止访问动态更改的局部变量,捕获这些变量可能会引入并发问题。

\n
\n
\n
\n

为了降低错误风险,他们决定确保捕获的变量永远不会发生变化。\n我对这会导致并发问题的说法感到困惑。\n

\n
\n

我在Baeldung上阅读了有关并发问题的文章,但我仍然对它如何导致并发问题感到有点困惑,有人可以帮我举个例子吗。\n提前致谢。

\n

java concurrency lambda

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

使用邻接表创建图

我正在遵循 Skiena 的算法设计手册 v3。

我看到有几个问题说书中有某些错别字,我不确定这是一个还是只是因为我看不懂。

考虑以下:

typedef struct edgenode {
    int y;                   /* adjacency info */
    int weight;              /* edge weight, if any */
    struct edgenode *next;   /* next edge in list */
} edgenode;

typedef struct {
    edgenode *edges[MAXV+1];  /* adjacency info */
    int degree[MAXV+1];       /* outdegree of each vertex */
    int nvertices;            /* number of vertices in the graph */
    int nedges;               /* number of edges in the graph */
    int directed;             /* is the graph …
Run Code Online (Sandbox Code Playgroud)

c algorithm graph-theory graph

5
推荐指数
1
解决办法
130
查看次数

可以取消引用函数指针吗

摘自 E Balagurusamy 的 C++ 面向对象编程

使用函数指针,我们可以让 C++ 程序在运行时动态选择一个函数。我们也可以将一个函数作为参数传递给另一个函数。在这里,函数作为指针传递。不能取消引用函数指针。C++ 还允许我们比较两个函数指针。

这里写到函数指针不能被取消引用。但是下面的程序运行成功。

#include<iostream> 
int Multiply(int i, int j) {
    return i*j;
}  
int main() {
int (*p)(int , int);
p = &Multiply;
int c = p(4,5);
int d = (*p)(4,11);
std::cout<<c<<" "<<d;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

在最后一行的第 4 行,我引用了指针。这是正确的吗?它没有给出任何编译器时间错误,最后第四行写的内容与最后第五行写的内容相同吗?我已经开始学习 C++,所以请不要介意我问了一些非常愚蠢的问题。

c++ function-pointers dereference

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

What does the following bash command mean?

The command-

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
Run Code Online (Sandbox Code Playgroud)

How this command is explained in the documentation-

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
# Move entire file tree from one directory to another
# [courtesy Alan Cox <a.cox@swansea.ac.uk>, with a minor change]

# 1) cd /source/directory
#    Source directory, where the files to be moved are.
# 2) &&
#   "And-list": if the …
Run Code Online (Sandbox Code Playgroud)

linux bash

0
推荐指数
1
解决办法
56
查看次数