我阅读了很多关于这个主题的内容,所有“详细”的解释似乎都遗漏了一个步骤:
对于客户端验证服务器,它执行以下操作(根据我的理解):
2?) 客户端使用公钥验证签名是否正确。
这就是我困惑的原因。说我是中间的那个人。我可以连接到服务器并获取服务器提供给我的任何信息,然后将其转发给客户端。客户如何知道谁实际出示了证书?
以下是我一般也知道的:
客户端知道公钥。它用它加密消息并将其发送到服务器。
服务器知道私钥,解密消息并将其发回。
现在客户端可以与服务器共享对称密钥。
中间可以有一个人,但这没关系,因为没有私钥就无法解密数据。
那么这与证书中的(静态?)数字签名有什么关系呢?
请帮助我理解该特定步骤(验证签名)。
我在这里检查了如何循环文件的帖子.我在网上检查了几个地方,试图了解在这里发布的代码中发生了什么:
(defun get-file (filename)
(with-open-file (stream filename)
(loop for line = (read-line stream nil)
while line
collect line)))
Run Code Online (Sandbox Code Playgroud)
这种语法似乎是如此神秘,而且引用并不容易理解.根据这里的引用"七个中的第四个/作为语法",语法是:
for var [type-spec] = expr1 [then expr2 ]
如果没有expr2,则使用expr1.
令我困惑的是什么:
除了如何工作之外我不知道该问什么,我迷失了方向:
while line
collect line
Run Code Online (Sandbox Code Playgroud)
我不知道如何用其他代码替换它.它看起来不像一个列表.我的直觉会告诉我它应该看起来像:
(while line (collect line))
Run Code Online (Sandbox Code Playgroud)
此外,不是同样如下:
while line collect line
Run Code Online (Sandbox Code Playgroud)
什么是expr1:
(read-line stream nil)
while line
collect line)
Run Code Online (Sandbox Code Playgroud)
要么
while line
collect line
Run Code Online (Sandbox Code Playgroud)
如果我有更多代码而不是collect line?会不会有名单?我没有看到结构.
我知道这些不仅仅是一个问题,但可能有一些我想念的大事,阻止我提出一个好问题.
我注意到Common Lisp中的以下行为(至少使用SBCL),我能够将其减少到以下内容:
假设我有以下宏:
(defpackage "MY-TEST"
(:use "COMMON-LISP")
(:export :appended
:not-appended))
(in-package :MY-TEST)
(defmacro not-appended ()
`(list ':type 'array))
(defmacro appended ()
`(list ':type 'something-else))
Run Code Online (Sandbox Code Playgroud)
以下是输出:
* (my-test:not-appended)
(:TYPE ARRAY)
* (my-test:appended)
(:TYPE MY-TEST::SOMETHING-ELSE)
Run Code Online (Sandbox Code Playgroud)
请注意,在第二个宏中,命名空间位于"SOMETHING-ELSE"之前.
问题:
请原谅我的英语.
我在我的班级中覆盖了operator =.现在我正在努力初始化一个静态成员.
我得到:错误:从'int'转换为非标量类型'TObj'请求
我的头文件:
#include <mutex>
template<typename T>
class TObj{
private:
std::mutex m;
public:
T val;
// = coperation
TObj& operator=(const T& rhs){
m.lock();
val = rhs;
m.unlock();
return *this;
}
operator T(){
m.lock(); // THIS IS A BUG. Thank you Praetorian
return val; // RETURNS AND NEVER UNLOCKS
m.unlock(); // DO NOT USE. Use lock_guard
}
~TObj(){}
};
class OJThread
{
private:
public:
OJThread();
virtual void run() = 0;
void start();
};
Run Code Online (Sandbox Code Playgroud)
我丑陋的cpp文件:
#include <iostream>
#include "ojthread.h"
using …Run Code Online (Sandbox Code Playgroud) 我试图"outb"到一个端口,但我一直得到:操作数类型不匹配'out'
这是代码:
outb %al, %bl
Run Code Online (Sandbox Code Playgroud)
如果我用任何8位寄存器(%ah,%bh,%bl,...)替换%bl,我仍然会得到相同的错误.
如果我硬编码端口号,那么代码可以工作.
如何编写通用方式(在汇编中)写入作为参数传递的端口?
以下代码似乎适用于C,但我不明白为什么以及如何:
asm volatile ( "outb %0, %w1" : : "a"(val), "Nd"(port) );
Run Code Online (Sandbox Code Playgroud)
谢谢