Skip to content

Commit 2cd339c

Browse files
committed
add doc & examples
1 parent 99501e1 commit 2cd339c

15 files changed

+109
-2
lines changed
40.6 KB
Loading
45.4 KB
Loading
11.3 KB
Loading
11.5 KB
Loading
11.6 KB
Loading
11.8 KB
Loading
11.6 KB
Loading
11.7 KB
Loading
4.78 KB
Loading

README.md

+87
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,91 @@
1+
# 埃特巴什码加密(Atbash Cipher)
12

3+
# 一、安装
4+
5+
```bash
6+
go get -u github.com/cryptography-research-lab/go-atbash-cipher
7+
```
8+
9+
# 二、代码示例
10+
11+
## 2.1 加密 & 解密
12+
13+
```go
14+
package main
15+
16+
import (
17+
"fmt"
18+
atbash_cipher "github.com/cryptography-research-lab/go-atbash-cipher"
19+
)
20+
21+
func main() {
22+
23+
// 对明文进行加密
24+
encrypt := atbash_cipher.Encrypt("HELLO")
25+
fmt.Println(encrypt) // Output: SVOOL
26+
27+
// 对加密结果进行解密
28+
decrypt := atbash_cipher.Decrypt(encrypt)
29+
fmt.Println(decrypt) // Output: HELLO
30+
31+
}
32+
```
33+
34+
## 2.2 破解
35+
36+
TODO
37+
38+
# 三、埃特巴什码加密(Atbash Cipher)原理详解
39+
40+
## 3.1 加密原理及过程详解
41+
42+
`Atbash Cipher`是属于古典密码中的一种替换型加密,它有一张映射用的密码表,只不过这张映射的密码表比较特殊,映射关系如下:
43+
44+
![image-20230126133146985](README.assets/image-20230126133146985.png)
45+
46+
可以看到上边这一行正好是`A-Z`的字典序排列,而下边这一·行正好是`A-Z`的字典序逆序排序,因此解密就是再进行一次加密,而从M和N之间那里算,它是对称的:
47+
48+
![image-20230126133505101](README.assets/image-20230126133505101.png)
49+
50+
下面让我们以要加密的明文`HELLO`为例来详细描述每一步的加密过程,因为是一对一进行的替换,因此加密后的密文的长度是和明文相等的,所以现在情况是这样子:
51+
52+
![image-20230126134413396](README.assets/image-20230126134413396.png)
53+
54+
明文下标0的字母是H,而H在映射表中对应的是S,因此密文的第一个字母是S:
55+
56+
![image-20230126134452745](README.assets/image-20230126134452745.png)
57+
58+
明文下标1的字母是E,而E在映射表中对应的是V,因此密文的第二个字母是V:
59+
60+
![image-20230126134606134](README.assets/image-20230126134606134.png)
61+
62+
明文下标2的字母是L,而L在映射表中对应的是O,因此密文的第三个字母是O:
63+
64+
![image-20230126134634620](README.assets/image-20230126134634620.png)
65+
66+
明文下标3的字母是L,而L在映射表中对应的是O,因此密文的第四个字母是O:
67+
68+
![image-20230126134646549](README.assets/image-20230126134646549.png)
69+
70+
明文下标4的字母是O,而O在映射表中对应的是L,因此密文的第四个字母是L:
71+
72+
![image-20230126134708923](README.assets/image-20230126134708923.png)
73+
74+
最终得到的加密结果是`SVOOL`
75+
76+
![image-20230126134723458](README.assets/image-20230126134723458.png)
77+
78+
解密和加密相同,不再赘述。
79+
80+
## 3.2 对Atbash Cipher的扩展
81+
82+
扩展尝试:能够对密码表进行扩展,不一定非要使用默认的密码表,同时又能够保持解密是再加密一次的特性。
83+
84+
TODO 已经论证是可行的,待编码实现
85+
86+
# 四、埃特巴什码加密(Atbash Cipher)破解原理详解
87+
88+
TODO
289

390

491

atbash_cipher.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package atbash_cipher
22

3-
import "unicode/utf8"
3+
import (
4+
"unicode/utf8"
5+
)
46

57
// 因为是对称的,所以只需要做一张映射表就可以了,映射表是固定的
68
var mappingTable = make(map[rune]rune, 0)

atbash_cipher_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import (
66
)
77

88
func TestDecrypt(t *testing.T) {
9-
plaintext := "abcdefg"
9+
plaintext := "HELLO"
1010
encryptResult := Encrypt(plaintext)
1111
fmt.Println(encryptResult)
1212
decryptResult := Decrypt(encryptResult)

docs/加密过程.vsdx

36 KB
Binary file not shown.

docs/映射字典.vsdx

43.8 KB
Binary file not shown.

examples/main.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
atbash_cipher "github.com/cryptography-research-lab/go-atbash-cipher"
6+
)
7+
8+
func main() {
9+
10+
// 对明文进行加密
11+
encrypt := atbash_cipher.Encrypt("HELLO")
12+
fmt.Println(encrypt) // Output: SVOOL
13+
14+
// 对加密结果进行解密
15+
decrypt := atbash_cipher.Decrypt(encrypt)
16+
fmt.Println(decrypt) // Output: HELLO
17+
18+
}

0 commit comments

Comments
 (0)