小编Mak*_*nix的帖子

客户端如何验证 SSL 中的服务器证书?

我阅读了很多关于这个主题的内容,所有“详细”的解释似乎都遗漏了一个步骤:

对于客户端验证服务器,它执行以下操作(根据我的理解):

  1. 它从服务器获取证书。证书将包含公钥和数字签名。

2?) 客户端使用公钥验证签名是否正确。

这就是我困惑的原因。说我是中间的那个人。我可以连接到服务器并获取服务器提供给我的任何信息,然后将其转发给客户端。客户如何知道谁实际出示了证书?

以下是我一般也知道的:

  1. 客户端知道公钥。它用它加密消息并将其发送到服务器。

  2. 服务器知道私钥,解密消息并将其发回。

  3. 现在客户端可以与服务器共享对称密钥。

  4. 中间可以有一个人,但这没关系,因为没有私钥就无法解密数据。

那么这与证书中的(静态?)数字签名有什么关系呢?

请帮助我理解该特定步骤(验证签名)。

ssl-certificate

10
推荐指数
3
解决办法
1万
查看次数

对于var =`语法的常见LISP`循环感到困惑

我在这里检查了如何循环文件的帖子.我在网上检查了几个地方,试图了解在这里发布的代码中发生了什么:

(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?会不会有名单?我没有看到结构.

我知道这些不仅仅是一个问题,但可能有一些我想念的大事,阻止我提出一个好问题.

loops common-lisp

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

Common Lisp将包名附加到宏中的引用键

我注意到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"之前.

问题:

  • 为什么他们有所不同?老实说,我期待"未附加"宏的行为.这是因为Common Lisp以某种方式知道"数组"吗?
  • 如果是,那么我在哪里可以找到其他已知关键字?

symbols common-lisp package

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

在c ++中重写= operator时如何初始化静态成员

请原谅我的英语.

我在我的班级中覆盖了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)

c++ operator-keyword

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

在AT&T汇编语法中使用outb输出到通用端口:获取操作数err​​oratch

我试图"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)

谢谢

assembly

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