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多功能刷订阅刷粉丝
滑块验证码本地识别
[ 站内搜索 ]
[ 最近热帖 ]
Aardio快速开发网站程序从入门到进阶系列教程集合 9335
万能助手 -- 扩展库大全集 9002
《边学C语言边赚钱——简码编程入门教程》系列集合 7090
电脑编程入门自学:Fiddler https 抓包时提示创建根证书不成功问题彻底解决(https插件dll方式) 6974
我常用的aardio技巧 6512
[源码下载]简码视频加密解密播放工具个人版v1.0发布,永久免费开源的知识变现神器 5816
通过chrome.dll中间件控制外部chrome浏览器 4174
自学编程?3秒钟完成你的第一个Aardio桌面程序! 3953
电脑计算机编程入门教程自学:腾讯tx或极验geetest滑块按住拖动完成拼图验证成功破解思路及源码 3326
aardio调用nodejs的ws模块做一个简单的聊天通信示例 3238
用aardio创建web工程图文讲解(1) 2927
乐玩插件AARDIO调用 2922
万能助手入门帮助教程:学会科学地管理工作文件 2544
Aardio文本编辑框控件edit_返回父窗口对象和改变父窗口对象 2455
简码编程官方群、地方群、分类群、联盟群大全! 2330
[ 近期热答 ]
Aaardio开发内嵌Electron浏览框放服务器上无法下载组件的解决办法 1
aardio内嵌Electron浏览框执行javaScript并获取返回值的解决办法实测有效 1
岁月如流水,静静的流,我是流水上一叶轻轻的扁舟 1
aardio键值对快速查找地名对应的数字 4
web.blink.form 打开网站后,总是无响应或停止工作,大红包求解决。 1
请教,在tab中打开网页,第二次打开报错怎么解决 1
万能助手在win7 64位安装出现问题,怎么解决? 1
请问如果修改网页源代码中找不到的文本 2
arrdio怎么连接mysql,并进行相关数据库操作? 3
dll导入出错 1
编程入门教程:aardio批量上传文件并显示进度条 1
万能助手入门帮助教程:自定义用户名 1
kio,这么干会不会被封杀? 2
python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 1
万能助手入门帮助教程:拖拽调整节点位置[动图] 1