RSA in Python(GUI in vue.ts & server on k8s)

部署的位置: http://dom.gtmdcm.com:3000/

啊,魔鬼的一个礼拜终于过去了,这周大概学了怎么手写RSA密钥对生成和用密钥加解密?

考虑到队友用Python,那我也就用Python了,我想好看的GUI嘛,就用Web做了(万物皆可Web)然后就用了Vue+ts来写前端

后端就直接Python了,我查了Python的里的那个http.server官网好像只被推荐写测试,我就脑子都没动,直接Django,然后longfangsong把我喷了一通……

然后就Hug做http服务了。如果只是调调库做这个研讨,那好像什么也都学不到(其实是一点也不酷)

那就用Python写个RSA吧,写完觉得Python就是屑语言[1]

首先肯定是这个密钥对怎么存,不难发现,这两个东西有一个共有的N,和不对称的两个数。

学过面向对象的人应该都会存了吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class RSAKey:

def __init__(self, n, component):
self.component = component
self.n = n


class RSAPublicKey(RSAKey):
def encrypt(self, data):
# return data ** self.component % n
return exp_mode(data, self.component, self.n)
# 蒙哥马利幂模


class RSAPrivateKey(RSAKey):
def decrypt(self, data):
return exp_mode(data, self.component, self.n)

具体的数论知识和方法我都懒得再说一遍了……,留keynote纪念吧

代码在这里的algorithm/rsa.py下

光看keynote应该就能理解的7788了吧,反而是大段的文字根本不是人能理解的。
之后就是怎么解决加解密的时候这个非常大大数幂的模,要看文字论述的话随便百度就有了。
这边记一下研讨时的Keynote吧,看了应该就知道代码的逻辑了。

前端的vue和ts没什么出彩的地方

代码在这里,把编译出的三大件复制近容器然后nginx成了

比较难做的处理部署时的跨域问题我封装在了nginx容器里了。可以在config.conf看到nginx配置文件

1
2
3
4
5
6
7
8
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

location /api {
proxy_pass http://dom.gtmdcm.com:8000/;
}

后端的服务被封令docker里后对外端口映射成8000,所以后端和前端就在一个域中了(端口和域名要都一样!)

这里在我解析了第二个域名的时候发现,换了域名啊,这个config还是得该才能避免跨域,然后这个nginx的config好想只能加perl模块后才能读环境变量。

果然nginx的配置文件是个靠试的问题[2]。

  • [1] 和longfangsong、jackysong59、ccg的私人对话
  • [2] 和Adam的私人对话