java对视频链接加密后返回给前端
问题:视频链接加密后返回给前端
AESUtil 加密使用可以直接采用该文中的方法
参考,前后端API交互数据加密——AES与RSA混合加密完整实例
接下来主要是介绍java加密相关的一些知识
前端AES加密可采用CryptoJS,是一个标准和安全加密算法的JavaScript库
前端RSA可采用JSEncrypt,它是一个很好用的RSA加密算法的JavaScript库
后端,org.apache.directory.studio
策略:前后端互相存公钥,使用AES和RSA混合加密
java导入AES加密,后端使用javax.crypto包
使用java实现AES加密以及解决javax.crypto.BadPaddingException异常
前后端API交互数据加密——AES与RSA混合加密完整实例
AES前后端对称加密
具体使用如下
Apache Commons Codec 使用小结,参考
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
加密 encryption、 解密 Decrypt
问题:AES加密中具体使用中需要引入的包和使用方法
import [org.apache.commons.codec.binary.Base64;](http://org.apache.commons.codec.binary.Base64;)
import [org.apache.commons.lang3.StringUtils;](http://org.apache.commons.lang3.StringUtils;)
import sun.misc.BASE64Decoder;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
存在问题:SecureRandom 实现完全随操作系统本身的内部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 MAC 或部分 linux 系统上则不同。需要引入jar包
<dependency>
<groupId>[org.apache.commons](http://org.apache.commons)</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
<artifactId>[org.apache.commons.codec](http://org.apache.commons.codec)</artifactId>
<version>1.8</version>
</dependency>
几个常用jar包
StringUtils, 对应包,org.apache.commons.lang3
Base64, 对应包,import org.apache.commons.codec.binary.Base64;
Base64工具类,也可以对数据进行加密。原理:Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。
问题:前后端加密的流程图
前后端请求加密(附源码),thymeleaf模板进行模拟小程序端。
问题:RSA是什么?
参考
RSA是一种公钥密码算法,它的名字由三位开发者,即Ron Rivest、Adi Shamir和Leonard Adleman的姓氏的首字母组成的。RSA被用于公钥密码和数字签名。
在RSA中,加密和解密的形式是相同的。加密是求“E次方的modN”,而解密则是求“D次方的modN”。其中,E是加密(Encryption)的首字母,N是数字(Number)首字母,D是解密(Decryption)的首字母。密钥对(公钥和私钥的密钥对)。E和N两个数组成一个公钥,如“公钥是{E,N}”。“密钥是{E,N}”。
问题:MD5和SHA是什么?
参考
MD5和SHA-1都被称作哈希(Hash)函数,用过Java语言的人对这个术语应该相当熟悉。Java类库里的Object类定义了hashCode这个函数,但是java的概念略有不同。正式的哈希函数的定义是“把任意长度的数据计算成固定长度的数据”。也就是说函数的输入是任意长的,输出总是固定长度的。MD5和SHA-1是两种加密用哈希函数,MD5的返回值总是128bit的,SHA-1的返回值是160bit,都是固定长度。MD5如果按十六进制表示的话是32位十六进制的数,SHA-1是40位十六进制的数。
MD5的英文全称是(Message Digest Algorithm MD5),译为消息摘要算法第五版,是众多哈希算法中的一种(哈希算法是一种可以将任意长度的输入转化为固定长度输出的算法)。
因此MD5算法是一种哈希算法,严格来说不能称之为一种加密算法,但是它可以达到加密的效果,因此下文中会出现“MD5加密”这样的称呼。任意长度的数据,其MD5值都是一个32位长度的十六进制字符串,区分大小写
SHA家族算法英文全称是Secure Hash Algorithm,中文译作安全散列算法,包括SHA-1、SHA-256等好几种算法,
SHA-1算法和MD5算法都有MD4算法导出,区别在于SHA-1算法在长度上是40位十六进制,即160位的二进制,而MD5算法是32位的十六进制,即128位的二进制,所以2的160次是远远超过2的128次这个数量级的,所以SHA-1算法相对来说要比MD5算法更安全一些。
加密时比较正确的方案是什么?(涉及到加盐这个关键词)
加盐在密码学中就是指,在密码的任意位置插入一些指定的字符串(即盐值salt)的过程。加盐的目的就是为了增强密码的复杂度,从而使得密码及其哈希值不被收集在彩虹表里,使得用户的密码无法被破解。
下面两个网站试用这两个函数,这样有个感性认识:
MD5:http://md5-hash-online.waraxe.us/
SHA-1:http://sha1-hash-online.waraxe.us/
问题:其他视频加密方法
BLOB,他的全称为big binary large object,二进制大对象。如果把一个视频文件转换成二进制对象,其大小肯定很大,这样理解就清楚多了。在浏览器端也提供了BLOB相关的API,通过new Blog(...)生成blog对象。