android中的加密算法,Android中加密算法[通俗易懂]

android中的加密算法,Android中加密算法[通俗易懂]Android中的加密算法可以分为两类:对称加密和非对称加密对称加密(DES、3DES、AES)概念对称加密算法中,发送方将明文和加密密匙经过特殊加密算法处理后,使其形成变成复杂的密文后发送出去。接受方用同样的密匙、同样加密算法的逆算法对密文进行解密。传统的DES加密算法只有56位密匙,最新AES技术拥有128位密匙。大大提高了安全性。优点:算法公开、计算量小、加密速度快、加密效率高缺点:发送…

大家好,又见面了,我是你们的朋友全栈君。

Android中的加密算法可以分为两类:对称加密 和 非对称加密

对称加密(DES、3DES、AES)

概念

对称加密算法中,发送方将明文和加密密匙经过特殊加密算法处理后,使其形成变成复杂的密文后发送出去。接受方用同样的密匙、同样加密算法的逆算法对密文进行解密。传统的DES加密算法只有56位密匙,最新AES技术拥有128位密匙。大大提高了安全性。

优点:算法公开、计算量小、加密速度快、加密效率高

缺点:发送方和接受方拥有同样的密匙,安全问题得不到保证;管理密匙会成为额外的负担;可逆。

非对称加密(MD5、SHA、RSA、DSA)

概念

非对称加密算法中,发送方和接收方需要使用完全不同但又完全匹配的一对钥匙即 公匙 和 私匙来加密和解密数据。如果发送方只想要接收方解密数据,发送方就需要先拿到接收方的公匙,并且发送方并不知道接收方的私匙。

优点:安全,不可逆

Base64

Base64其实就是将数据进行base64编码传输,不算什么加密算法。

异或加密

原理:某个值异或一个数2次后,得到是本身

异或运算中,如果某个字符(或数值)x 与 一个数值m 进行异或运算得到y,则再用y 与 m 进行异或运算就可以还原为 x ,因此应用这个原理可以实现数据的加密解密功能。

//固定key的方式

public byte[] encrypt(byte[] bytes) {

int len = bytes.length;

int key = 0x12;

for (int i = 0; i < len; i++) {

bytes[i] ^= key;

}

return bytes;

}

//测试

byte[] bytes = encrypt(“whoislcj”.getBytes());//加密

String str1 = new String(encrypt(bytes));//解密

//不固定 (加密)

public byte[] encrypt(byte[] bytes) {

int len = bytes.length;

int key = 0x12;

for (int i = 0; i < len; i++) {

bytes[i] = (byte) (bytes[i] ^ key);

key = bytes[i];

}

return bytes;

}

//解密

public byte[] decrypt(byte[] bytes) {

int len = bytes.length;

int key = 0x12;

for (int i = len – 1; i > 0; i–) {

bytes[i] = (byte) (bytes[i] ^ bytes[i – 1]);

}

bytes[0] = (byte) (bytes[0] ^ key);

return bytes;

}

//测试

byte[] bytes = encrypt(“whoislcj”.getBytes());//加密

String str1 = new String(decrypt(bytes));//解密

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145256.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板

    [cocos2dx注意事项014]一个用于cocos2dx对象智能指针模板

    2022年1月11日
    40
  • Java Double转Bigdecimal丢失精度原因学习

    Java Double转Bigdecimal丢失精度原因学习记录学习Double转Bigdecimal丢失精度的原因注意事项:不能直接使用Bigdecimal的构造函数传double进行转换,部分数值会丢失精度,因为计算机是二进制的Double无法精确的储存一些小数位,0.1的double数据存储的值实际上并不真的等于0.1如该方式将0.1转换为Bigdecimal得到的结果是0.1000000000000000055511151231257827021181583404541015625这是为什么呢,以往只是知道结论知道不能这么用,也大概知道是因为do

    2022年6月4日
    33
  • Tasklist命令详解

    Tasklist命令详解“Tasklist”命令是一个用来显示运行在本地或远程计算机上的所有进程的命令行工具,带有多个执行参数。

    2022年5月3日
    64
  • powerdesigner生成mysql语句_oracle创建表的sql语句

    powerdesigner生成mysql语句_oracle创建表的sql语句在实际工作中,一张表,我们可能需要在Mysql数据库中建表,又要在Oracle数据库中建表。表中每个字段的数据类型、中文注释、是否可为NULL问题,非常影响我们建表的效率。本篇文章,以Mysql数据库表为原表,通过PowerDesigner工具将其转化成Oracle数据库建表语句。1、以student(学生表)为例,Mysql数据库中建表语句如下所示。需要注意的是,…

    2022年9月7日
    1
  • vue中 关于$emit的用法

    vue中 关于$emit的用法1、父组件可以使用props把数据传给子组件。2、子组件可以使用$emit触发父组件的自定义事件。vm.$emit(event,arg)//触发当前实例上的事件vm.$on(event,fn);//监听event事件后运行fn;例如:子组件:<template><divclass=”train-city”>&l………

    2022年6月25日
    44
  • 0x0000007e_c0000005改兼容性没用

    0x0000007e_c0000005改兼容性没用对于怎么解决应用程序正常初始化0xc0000005失败这个问题,小编觉得是需要知道的,因为我们在生活中遇到类似这样的问题几率还是蛮大的。所以小伙伴们要接着往下看哟~接下来小编就来告诉你们怎么解决应用程序正常初始化0xc0000005失败的问题。有的时候刷网页刷到一半,就突然间出现应用程序正常初始化0xc0000005失败的窗口提示,但是这是怎么回事呢?又该怎么解决呢?稳住,接下来小编就来告诉你们怎…

    2022年10月3日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号