Aardio中RSA的加密解密的特点与应用场景及演示代码

Admin Admin
发布:2020-04-30 16:33:52 分类:心得经验
Aardio中RSA的加密解密的特点:
1.加密的密匙被别人反编译出来也没关系,甚至可以主动公开.
2.同样的内容,每次加密会生成不同的密文,但都可以用私匙正确解密.

应用场景:
1.服务端与客户端通信,使用http或ws协议,如果是明文协议,普通人可以通过抓包看到明文,如果加密后即使是相同内容也每次密文不一样,不懂得反编译exe的人,没能从源码里找出公匙,就没法破解,不知道通信的明文内容.
2.加大抓包对比难度,因为即使是相同的内容,每次加密生成的密文也不一样,别人没有私匙没法直接解密为明文来对比,只能每次都提交来通过返回的应答来确定是不是加密正确,这就加大了分析表单提交的各项值怎么计算出来的难度和所耗费的时间.
3.适用于不想明文内容被人知道的场景,比如某些偷偷下载安装的见不得光的通信指令,或某些动态加密环节的动态密匙传输不能让别人抓包看到.
4..其它需要明文不变但密文可以有多份的场景.

具体项目:
1.防撞库,用来把用户密码以密文方式保存到数据库,这样别人进了数据库也还原不出密码,知道公匙也很难用撞库的方式把密码撞出来,因为同一个密码有N个正确的密文,没有唯一性就很难遍历出密码原文是什么.
2.数据库各行记录校验防修改,如资金转帐提现等重要记录,为防止别人修改字段值或添加新记录,加一列校验列,把前面各字段加盐后加密成校验值,别人不知道私匙无法伪造或还原分析校验思路.

演示代码:
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=1056;bottom=754)
winform.add(
["button_加密"]={cls="button";text="加密(使用公钥)";left=193;top=665;right=310;bottom=709;z=15};
["button_解密"]={cls="button";text="解密(使用私钥)";left=737;top=665;right=854;bottom=709;z=16};
["edit_公匙"]={cls="edit";left=26;top=63;right=508;bottom=264;autohscroll=false;edge=1;multiline=1;vscroll=1;z=3};
["edit_密文1"]={cls="edit";left=26;top=497;right=507;bottom=654;autohscroll=false;edge=1;multiline=1;vscroll=1;z=11};
["edit_密文2"]={cls="edit";left=546;top=297;right=1027;bottom=454;autohscroll=false;edge=1;multiline=1;vscroll=1;z=6};
["edit_明文1"]={cls="edit";text="123456 简码编程 www.jianma123.com";left=26;top=297;right=507;bottom=454;autohscroll=false;edge=1;multiline=1;vscroll=1;z=5};
["edit_明文2"]={cls="edit";left=546;top=497;right=1027;bottom=654;autohscroll=false;edge=1;multiline=1;vscroll=1;z=12};
["edit_私匙"]={cls="edit";left=546;top=63;right=1028;bottom=264;autohscroll=false;edge=1;multiline=1;vscroll=1;z=4};
groupbox={cls="groupbox";text="加密";left=14;top=11;right=524;bottom=738;edge=1;z=1};
groupbox2={cls="groupbox";text="解密";left=534;top=11;right=1044;bottom=738;edge=1;z=2};
static={cls="static";text="公匙:(加密用,可公开)";left=26;top=42;right=182;bottom=59;transparent=1;z=7};
static2={cls="static";text="私匙:(解密用,不可公开)";left=546;top=42;right=719;bottom=59;transparent=1;z=8};
static3={cls="static";text="明文:";left=26;top=274;right=74;bottom=291;transparent=1;z=9};
static4={cls="static";text="密文:";left=546;top=274;right=594;bottom=291;transparent=1;z=10};
static5={cls="static";text="明文:";left=546;top=477;right=594;bottom=494;transparent=1;z=13};
static6={cls="static";text="密文:";left=26;top=477;right=74;bottom=494;transparent=1;z=14}
)
/*}}*/

import crypt.rsa;
var rsa = crypt.rsa();
rsa.genKey();

winform.button_加密.oncommand = function(id,event){

//导入公匙
var header = rsa.importPemKey(winform.edit_公匙.text);
if(header){
//winform.msgbox("已导入:" + header);
}else{
winform.msgboxErr("错误的密钥格式");
return ;
}

var 明文 = winform.edit_明文1.text;
var ciphertext = rsa.encryptReverse(明文);//转换
if(ciphertext){
winform.edit_密文1.text = crypt.encodeBin(ciphertext);
winform.edit_密文2.text = crypt.encodeBin(ciphertext);
}else {
winform.msgboxErr("加密失败,请检查是否导入了正确的公钥")
}


}

winform.button_解密.oncommand = function(id,event){

//导入私匙
var header = rsa.importPemKey(winform.edit_私匙.text);
if(header){
//winform.msgbox("已导入:" + header);
}else{
winform.msgboxErr("错误的密钥格式");
return ;
}

var ciphertext = crypt.decodeBin(winform.edit_密文2.text);
if(!ciphertext){
winform.msgboxErr("解密失败,请检查是否输入了base64编码的密文");
return;
}

var plaintext = rsa.decryptReverse(ciphertext);
if(plaintext){
winform.edit_明文2.text = plaintext;
}
else {
winform.msgboxErr("解密失败,请检查是否导入了正确的私钥")
}
}

winform.edit_公匙.text = /*
-----BEGIN RSA PUBLIC KEY-----
MIGJAoGBAPo9wudnB2WU4SW7a51Ynx2mPtBicRsEQq9roMuypU9PkLK5uzNyZdPy
2eBkb8fm4kyLAI1NgvBPnmjHTYolMuuCGS5+ZaTUg0F33KCVQmMQJg/sjd2mapl3
gL4ged9o3SkKQ3QZm7ZRyYB6TTSqLfuAMpc3lzkZhUv6YUTxdO4pAgMBAAE=
-----END RSA PUBLIC KEY-----
*/

winform.edit_私匙.text = /*
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQD6PcLnZwdllOElu2udWJ8dpj7QYnEbBEKva6DLsqVPT5Cyubsz
cmXT8tngZG/H5uJMiwCNTYLwT55ox02KJTLrghkufmWk1INBd9yglUJjECYP7I3d
pmqZd4C+IHnfaN0pCkN0GZu2UcmAek00qi37gDKXN5c5GYVL+mFE8XTuKQIDAQAB
AoGBAJPB7hjGvBZd/0dRUCy7TFCsfgB7b/+c12dPLMW6OWQIPg9aHdA15yxsA/w8
Mcieatb5aJ0GvJ761DVYIU/FwTclU41Wlwb9ONz7Uhumh63w4lGxIjkp2wKfm50Z
P9LgYzreCRBVOi4wntQL71G3YHLlYnU95S2nN4oAguvH3vHRAkEA/4OYSxw2/lRA
Su52iaYRVuTr7dmNvsmHgibAO6v1+uxUWKAuOFexfDHx81chjvXhiKkRFS5Rchby
5lssy/GodQJBAPq3mWa7sCl5RoSZLNOFsOxv1epywCSR7JHzuzeQlCXMSq+qtNOZ
7n7ADx0+PSL4rvZbeCWb4Vwtr8Ylit+4mGUCQQDQ1oDaGxSDqN7nn6H4/We8qtx+
icsFvffok72YyAMDdLe3vCwq1tn01WmY54VBMIyGwxB4TGQ7KLCdQLYLdtelAkB9
jzcm6PYHPzIes+tsHzcEodl6qW8qoV3dljd7U0+uQkphAVe/5QY4ugyXs5TAj9Rn
klVwWEmbdVHjJOgQtIy1AkAKX8f9xMvde5zYQaT+yOw4rpJOUB+FFGoc+8aHa4Y9
mdCcqmA9x+I6QE5NlUrKPwvCoHf6MypklpW4o+eGDXOT
-----END RSA PRIVATE KEY-----
*/

winform.show();
win.loopMessage();






[ 发单/接单 ]
换IP投票软件
PC蛋蛋自动挂机投注
新浪微博发微博显示尾巴的方法,比如显示来自iphone 7
百度文库批量自动上传软件
一点资讯app刷阅读量/评论/收藏/订阅功能/手机号注册
定做一个阿迪达斯官网注册器(需要破点击文字式验证码)
定制人人网自动注册/修改资料/采集/私聊软件
酷狗繁星直播网页协yi
YY多功能刷订阅刷粉丝
滑块验证码本地识别
狼人杀POST QQ登录注册 获取金币数量
做个贴吧发发帖的软件懂的来
今日头条账号保存cookie
抖音粉丝软件定做,只要粉丝
百家号自媒体发文软件定制
哔哩哔哩播放量
读取TB某个商品上架时间和相关信息
网易博客软件定制
定制天涯论坛发帖软件
定制今日头条批量自动发私信软件
[ 站内搜索 ]
[ 最近热帖 ]
万能助手 -- 扩展库大全集 13752
用aardio创建web工程图文讲解(1) 12841
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 11743
aardio绘图演示 11413
通过chrome.dll中间件控制外部chrome浏览器 10125
我常用的aardio技巧 9775
《边学C语言边赚钱——简码编程入门教程》系列集合 9616
aardio使用http或whttp进行get/post请求时经常cookies失效怎么办?__电脑计算机编程入门教程自学 9322
[源码下载]简码视频加密解密播放工具个人版v1.0发布,永久免费开源的知识变现神器 8557
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 8048
编程入门教程:aardio批量上传文件并显示进度条 7883
aardio调用nodejs的ws模块做一个简单的聊天通信示例 7037
电脑计算机编程入门教程自学:原生JavaScript判断字符是否为A-Za-z英文字母 6908
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 6501
乐玩插件AARDIO调用 6086
[ 近期热答 ]
电脑计算机编程入门教程自学:什么是buffer缓冲区? 1
aardio_代码编辑框书签管理器开源 1
aardio_怎么用ide库从代码编辑框中取出指定行的源码? 1
aardio_codepage代码页编码乱码暴力猜解工具 1
aardio内嵌echarts图表添加鼠标事件响应功能 2
aardio列表框listbox_模糊查找和精确查找 1
8亿QQ绑定手机泄露:通过腾讯QQ号查询QQ绑定的手机号码漏洞! 1
carl listviewex调用例子----------源码搬运工 2
Aardio内嵌Electron浏览框怎么正确添加启动参数? 1
Aardio取汉字的字节数或字符数 1
怎么实现mssql图片数据的读写 2
aardio_从49个数字里选六个和值为150的不重复的数字 1
在嵌入wps的时候,多了一个 透明的边框,这个怎么消除它 1
万能助手入门帮助教程:学会科学地管理工作文件 1
Aaardio开发内嵌Electron浏览框放服务器上无法下载组件的解决办法 1