base64加密_联邦学习重要技术解读——你不得不知道的加密算法

数据加密是联邦学习的一个重要环节,对于数据隐私保护起着至关重要的作用,本期推送将介绍常用的加密算法,并且给出部分加密算法基于Java的算法实现。”——来自“云时代架构”

01 加密算法的主要类别

常用的加密算法有对称加密算法,非对称加密算法,哈希算法等。

对称加密,加密和解密是对称的,加密时用一个秘钥去加密,解密时用同一个秘钥去解密,由信息发送方和接收方共同约定一个秘钥。缺点是风险都在这个秘钥上面,一旦秘钥被窃取,信息会暴露,所以安全级别不够高。常用对称加密算法有DES,3DES,AES等。

非对称加密顾名思义就是加密与解密的过程不是对称的,不是用同一个秘钥。非对称加密有公私钥对的概念,也就是有两把秘钥,一把是公钥,一把是私钥,一对公私钥有固定的生成方法,在加密的时候,用公钥去加密,接收方再用对应的私钥去解密。使用时可以由接收方生成公私钥对,然后将公钥传给加密方,这样私钥不会在网络中传输,没有被窃取的风险。通过和对称加密的对比,可以看到,非对称加密解决了秘钥传输中的安全问题。常用非对称加密算法有RSA,ECC等。

哈希算法简单说就是将任意数据都转换成一个固定长度的字符串,通过哈希后的值几乎无法推导出原文,而且两个不同的原文哈希后结果一定不同。常用算法有MD5,SHA-256等等。

此外,Base58和Base64也是常用的加密算法,下面将对常用的加密算法进行详细介绍。

02 常用加密算法详解

1、 MD5

MD5是哈希算法的典型代表,全称叫Message-Digest Algorithm 5,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一,基本原理是将数据运算为另一固定长度值,MD5的前身有MD2、MD3和MD4。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式,即把一个任意长度的字节串变换成一定长的十六进制数字串。Java的JDK就自带了MD5加密算法,可以直接调用,使用非常方便。

MD5算法具有以下特点:

  • 压缩性:任意长度的数据,算出的MD5值长度都是固定的。
  • 容易计算:从原数据计算出MD5值很容易。
  • 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
  • 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

2、SHA-256

SHA-256也属于哈希算法,是安全散列算法(Secure Hash Algorithm,简称SHA)的一种。SHA算法是一个密码散列函数家族,SHA算法能计算出一个数字消息所对应到的、长度固定的字符串,且若输入的消息不同,它们对应到不同字符串的机率很高。SHA家族包括五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。

说简单来说,SHA-256算法就是将一个对象的多个关键不重复信息组合起来,通过算法生成一个加密字符串。下面是Java中SHA-256算法的具体内容:

05bd038b2d3116c0caede975e9f9c1e0.png

下面是算法的测试类内容:

d50abded1af39fe0867533f2730f5ab5.png

运行可以看到如下结果:

80bec70bf3980b4bba29aeb363f9f9be.png

3、Base64&Base58

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java的Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL中的形式。此时,采用Base64编码具有不可读性,需要解码后才能阅读。

Java中使用Base64也非常简单,jdk的工具包中自带Base64的工具类,先新建一个工具类:

1ca0b008dbd7f057d2cbc4248b480757.png

Base64的加密过程是可逆的,加密解密内容如下:

31fef341340ce59b327dbe823131a280.png

可以看到使用非常简单,下面是测试类内容:

1982caf2218d9005e83b35765d30e74f.png

执行测试方法,结果如下:

b827213d8c40c417ab9ebcc064e9779c.png

Base58和Base64类似,也是一种将二进制转为可视字符串的算法,它和Base64的主要区别是,转换出来的字符串去除了几个看起来会产生歧义的字符,如 0 (零), O (大写字母O), I (大写的字母i) and l (小写的字母L) ,和几个影响双击选择的字符如“/”和“+”,结果字符集正好58个字符(包括9个数字,24个大写字母,25个小写字母)。Base58是站在使用者的角度考虑的,比Base64更加人性化。

Java中Base58算法的使用也很便捷,新建一个Base58的工具类,目录结构如下:

6cb2d750de9ed9db14839fe06727a76c.png

工具类的大概内容结构如下:

c39e28bef259ceb245c3426e76aaa977.png

下面是测试代码:

5210a527ec5ce093bfe827c455e78301.png

运行结果如下:

5a0462fbb0120bcb15aafeb51c9907be.png

更详细的内容可查看项目代码:https://github.com/guoyb1990/btc-demo.git

-END-

本文非联邦学习原创文章,转载请联系原公众号云时代架构获得授权。

投稿或寻求报道:fedlearningai@163.com

ebef8733a9ead37530de188def746326.png

长按扫描上方二维码加关注,

为您送上源源不断的前沿知识!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值