网络安全之数据加密(DES、AES、RSA、MD5)

刚到公司时,我的工作就是为app端提供相应的接口。之前app使用的是PHP接口,对数据加密方面做得比较少。到使用java接口时,老大开始让我们使用DES加密,进行数据传输,但是后来觉得DES是对称加密,密钥存在客户端不安全,后来就让使用RSA加密:将公钥存在客户端,私钥存放在服务端.这样也就产生了一个问题:**虽然客户端发送的加密数据,服务端可以解密,但服务端返回的加密数据,我们客户端没有找到公钥解密算法!**而且非对称加密的RSA加密效率较低,一次加密的数据大小也很局限!

后来,我和ios的哥们商量了一个方案:**客户端传递的参数使用RSA公钥加密,另外随机生成一个8位desKey使用RSA公钥加密传递给服务端;服务端使用私钥解密参数及DES密码,再将客户端需要的数据使用desKey进行DES加密后返回给客户端。**这样既能保证数据安全,又能提高加密效率!后来老大采用了我们的方案。

下面演示一下DES、AES及RSA的使用:

1.演示DES使用:

<pre class="brush: java; gutter: true;">

String plaintext = "hahaGG123哈哈";

String ciphertext = DES.encryptDES(plaintext, DES.PASSWORD_CRYPT_KEY);

System.out.println("明文:" + plaintext);

System.out.println("密钥:" + DES.PASSWORD_CRYPT_KEY);

System.out.println("密文:" + ciphertext);

System.out.println("解密后:" + DES.decryptDES(ciphertext, DES.PASSWORD_CRYPT_KEY));

</pre>

执行结果:

DES演示结果

2.演示AES使用:

<pre class="brush: java; gutter: true;">

String content = "Hello!12345你好";

String password = "12345678";

//加密

System.out.println("加密前:" + content);

String ciphertext = encryptByPassword(content, password);

System.out.println("加密后:"+ciphertext);

//解密

String decryptResult =decryptByPassword(ciphertext,password);

System.out.println("解密后:" + decryptResult);

</pre>

执行结果

AES演示结果

3.演示RSA使用:

其实RSA的公钥和私钥是等价的,并没有严格的区分,一般自己保留的为私钥,给对方使用的为公钥!

<pre class="brush: java; gutter: true;">

//测试字符串

String encryptStr= "12345678";

try {

System.out.println("=============私钥加密,公钥解密===============");

//私钥加密

System.out.println("明文:"+encryptStr);

long encryptstart = System.currentTimeMillis();

String cipherStr = encryptByPrivateKey(encryptStr);

System.out.println("私钥加密密文:"+cipherStr);

long encryptend = System.currentTimeMillis();

System.out.println("encrypt use time:"+(encryptend-encryptstart)+"ms");

//公钥钥解密

long decryptstart = System.currentTimeMillis();

String plaineText = decryptByPublicKey(cipherStr);

System.out.println("解密:"+plaineText);

long decryptend = System.currentTimeMillis();

System.out.println("decrypt use time:"+(decryptend-decryptstart)+"ms");

System.out.println("=============公钥加密,私钥解密!===============");

//公钥加密

System.out.println("明文:"+encryptStr);

encryptstart = System.currentTimeMillis();

cipherStr = encryptByPublicKey(encryptStr);

System.out.println("公钥加密密文:"+cipherStr);

encryptend = System.currentTimeMillis();

System.out.println("encrypt use time:"+(encryptend-encryptstart)+"ms");

//私钥解密

decryptstart = System.currentTimeMillis();

plaineText = decryptByPrivateKey(cipherStr);

System.out.println("解密:"+plaineText);

decryptend = System.currentTimeMillis();

System.out.println("decrypt use time:"+(decryptend-decryptstart)+"ms");

System.out.println("===========获取私钥公钥============");

genKeyPair();//获取密钥对

}catch(Exception e){

e.printStackTrace();

}

</pre>

执行结果:

RSA加密演示结果

我们的方案是这样的:

将Des和Rsa结合使用:将desKey及关键字段(用户id等)使用rsa公钥加密,传到服务器,服务器使用rsa私钥解密,获得desKey及用户id等,并根据id查找用户余额,使用des加密后返回给客户端!

<pre class="brush: java; gutter: true;">

@RequestMapping

@ResponseBody

public TotalNote testRsaAndDes(String userId,String desKey){

System.out.println("收到请求!");

TotalNote note = new TotalNote();

try{

System.out.println(userId);

//使用私钥解密

userId = RSA.decryptByPrivateKey(userId);

desKey = RSA.decryptByPrivateKey(desKey);

//查找数据库获取用户,账户余额等关键字段,使用des进行加密

String account = "10000.0";

account = DES.encryptDES(account, desKey);

note.setError_code(StatusCode.SUCCESS_CODE);

note.setError_message("获取数据成功!");

note.setData(account);

return note;

}catch(Exception e){

e.printStackTrace();

note.setError_code(StatusCode.ERROR_CODE);

note.setError_message(StatusCode.ERROR_MESSAGE);

return note;

网络安全学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

需要网络安全学习路线和视频教程的可以在评论区留言哦~

最后
  • 如果你确实想自学的话,我可以把我自己整理收藏的这些教程分享给你,里面不仅有web安全,还有渗透测试等等内容,包含电子书、面试题、pdf文档、视频以及相关的课件笔记,我都已经学过了,都可以免费分享给大家!
    给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。

黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做"正向"的、结合"业务"与"数据"、"自动化"的"体系、建设",才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:

此教程为纯技术分享!本教程的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本教程的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施

,从而减少由网络安全而带来的经济损失

相关推荐
叶落阁主4 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
用户962377954482 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机2 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954482 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star2 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954482 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher4 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行7 天前
网络安全总结
安全·web安全
red1giant_star7 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全