ARTS-week12

Algorithms

Add Binary

思路:每次取出一个字符转为数字,如果无法取出字符则按0处理,加上进位carry,对2取余为当前位的数字,对2取商为当前进位的值,最后判carry,如果为1的话,要在结果最前面加上一个1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
string addBinary(string a, string b) {
string res = "";
int alen = a.size() - 1, blen = b.size() - 1, carry = 0;
while (alen >= 0 || blen >= 0) {
int p = alen >= 0 ? a[alen--] - '0' : 0;
int q = blen >= 0 ? b[blen--] - '0' : 0;
int sum = p + q + carry;
res = to_string(sum % 2) + res;
carry = sum / 2;
}
return carry == 1 ? "1" + res : res;
}
};

Sqrt(x)
思路:二分就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
int mySqrt(int x) {
if (x <= 1) {
return x;
}
int left = 0, right = x;
while (left < right) {
int mid = left + (right - left) / 2;
if (x / mid >= mid) {
left = mid + 1;
}
else {
right = mid;
}
}
return right - 1;
}
};

Review

本周阅读英文文章 Data Security and Resilience using Secret Shares and Elliptic Curve Methods

Technique

使用协程完成带额外状态信息的回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python
# -*- coding:utf-8 -*-


def apply_async(func, args, *, callback):
result = func(*args)
callback(result)


def print_result(result):
print('Got:', result)


def add(x, y):
return x + y


def make_handler():
sequence = 0
while True:
result = yield
sequence += 1
print('[{}] Got: {}'.format(sequence, result))


handler = make_handler()
next(handler)
apply_async(add, (2, 3), callback=handler.send)
apply_async(add, ('hello', 'world'), callback=handler.send)
1
2
[1] Got: 5
[2] Got: helloworld

Share

本周分享《计算机安全-原理与实践》攻击面与攻击树
一、攻击面
攻击面是由系统中可达到的和可被利用的脆弱点构成的。
攻击面的例子:

  • 对外开放的Web和其他服务器的端口,监听这些端口的代码;
  • 在防火墙内可用的服务;
  • 处理进入内部的数据、电子邮件、XML、办公文档和工业级定制数据交换格式的代码;
  • 界面、SQL和Web表单;
  • 对敏感信息有访问权限的员工,这些敏感数据可能会受到社会工程学的攻击。

攻击面分类:

  • 网络攻击面:指企业网、广域网或者局域网中的脆弱点或漏洞,包括网络协议中的脆弱点,例如利用这些弱点进行拒绝服务攻击、通信线路破坏和各种不同形式的入侵攻击。
  • 软件攻击面:指应用程序、实用程序或操作系统中代码的漏洞,尤其是指Web服务器软件中的漏洞。
  • 人为攻击面:指员工或者外部人员,诸如社会工程学、人为错误和受信任的内部人员引起的脆弱点。

二、攻击树
攻击树是一个分支型的、层次化的数据结构,表示了一系列潜在技术,这些技术可利用安全漏洞进行攻击。

作为攻击目标的安全事件是这个树的根节点,攻击者可以迭代地、递增地达到这个目标的途径就是这棵树的分支和子节点。每一个子节点都定义了一个子目标,每一个子目标都可能有一系列的进一步的子目标,等等。从根节点沿着路径向外延伸的最终的节点,也就是叶子节点,代表了发起一个攻击的不同方式。除了叶子节点外的每一个节点,或者是与节点(AND-node)或者是或节点(OR-node)。若想达成与节点表示的目标,则该节点的所有子节点代表的子目标都要求被实现。若想达成或节点表示的目标,则只需完成其中至少一个子目标即可。分支可以用代表难度、代价或其他攻击属性的值标注,以便与可选择的攻击进行比较。

0%