1 Star 0 Fork 0

leeyi / encryption

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

#encryption

公钥加密私钥解密是密送,保证消息即使公开也只有私钥持有者能读懂。 私钥加密公钥解密是签名,保证消息来源是私钥持有者。 数字签名只能验证数据的完整性,数据本身是否加密不属于数字签名的控制范围。

Python3/Java/php7 md5/sha1 加盐加密

参考 https://gist.github.com/leeyisoft/80b9bdaccd3b2f93c879530de10993fd

生成rsa密钥

openssl genrsa -des3 -out test_rsa_private_key.pem
#去除掉密钥文件保护密码
openssl rsa -in test_rsa_private_key.pem -out test_rsa_private_key.pem
#分离出公钥
openssl rsa -in test_rsa_private_key.pem -pubout -out test_rsa_public_key.pem

#生成一个没有加密的ca私钥
openssl genrsa -out rsa_pri_key.pem 1024
openssl rsa -in rsa_pri_key.pem -pubout -out rsa_pub_key.pem
openssl pkcs8 -topk8 -inform PEM -in rsa_pri_key.pem -outform PEM -nocrypt > rsa_pri_key_pkcs8.pem

如果签名报以下错误:

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence

则说明rsa私钥的格式不是pksc8格式,需要使用以下命令转换一下:

openssl pkcs8 -topk8 -inform PEM -in rsa_pri_key.pem -outform PEM -nocrypt > rsa_pri_key_pkcs8.pem

 CS,C客户端,S服务器端 在客户端软件发布前,客户端保存一个公钥,服务器保存一个私钥;客服端and服务器都保存一个固态key : solid_key                  步骤1:客户端随机生成一个对称密钥,称为动态key : dynamic_key,使用公钥加密内容(dynamic_key+账户+密码+其他需要的参数)。发送给服务器

        步骤2:服务器收到后使用私钥解密,并验证用户和密码是否正确,正确的话保存此dynamic_key在用户的信息中(如果原先已经有了dynamic_key就替换掉旧的),返回数据:包括客户端登录成功的信息,返回一个Token(令牌,以后见牌如见人)和其他需要返回的参数(传输过程中不携带uid,用token标识用户唯一身份,更安全)。

        步骤3:使用本地保存的dynamic_key解密得到Token和其他参数。 安全传输准备工作做完了。

        步骤4:每次传输数据对于加密的内容一律使用dynamic_key进行加密,按照协商好的签名规则进行签名signature(需要dynamic_key参与到签名规则中,以保障安全),并附以明文参数token、明文参数signature、密文参数params这三部分,然后把此内容发送给服务器。

        步骤5:根据token找到保存的dynamic_key,然后进行解密(dynamic_key仅仅用来解密,对于解密的内容无法验证),然后根据签名规则验证签名;查看token是否匹配,如果匹配的话那么此次请求就是有效的,否则无效,需要重新登录;如果验证签名失败,直接返回错误。

更新公钥通知服务 服务器端首先需要用原来的私钥签名,客服端有原来的公钥验证签名,如果签名通过,客服端方可更新公钥;签名不通过,需要重新下载最新客户端安装包(包含新的公钥);

如果被网络接触,还需要知道固态key,才能够修改公钥

下表解决“根据token获取对应用户uid”在redis中如果做持久存储的话,token失效无法被有效清除,导致占用内存的风险;

CREATE TABLE `lee_user_token` (
  `uid` int(11) NOT NULL DEFAULT '0' COMMENT '用户UID',
  `token` char(36) NOT NULL COMMENT 'uuid 生产的36位字符串',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `i_token` (`token`,`uid`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='这里只是存储 token 与 uid 的映射关系,不做登录过期有效性判断';

空文件

简介

一些加密解密加签验签的算法 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/leeyi/encryption.git
git@gitee.com:leeyi/encryption.git
leeyi
encryption
encryption
master

搜索帮助