AES加密问题,求大神解答,新人求教育

泡面3分钟 2019-05-23 10:17:53
最近开发项目,需要使用到AES加密,然后我选择了 AES-ECB-PK5-128来做加密,我使用的是java语言,在实现加密时,发现密钥只能使用16个字节...,我就觉得密钥受限很难受啊,于是我就找了找有没有让密钥不受限的方法,方法是找到了,但我不理解啊,十脸懵B,所以发个贴看下可以捡到一个大神回答不,话不多说先贴代码:

package com.test;

import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;
import java.util.Arrays;

public class test {
public static void main(String[] args) throws Exception {
String password="01234567890123456789";
System.out.println(Arrays.toString(password.getBytes()));

KeyGenerator kgen = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );
secureRandom.setSeed(password.getBytes());
kgen.init(128, secureRandom);
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
System.out.println(Arrays.toString(enCodeFormat));

}
}



"SecureRandom" jdk 1.8 API中对这个类的描述是“这个类提供了一个密码强的随机数生成器(RNG) ”,而它的方法“setSeed(byte[] seed)”,则是指“重新设定这个随机对象。”,然后“KeyGenerator .init(int keysize, SecureRandom random) ”是指“使用用户提供的随机源,初始化该密钥生成器以进行某些密钥化”;

好吧,我是真不理解“随机”这个事啊,凭啥我每次跑,我都会生成同样内容(根据“password”决定生成内容,PS这个是我不懂的地方)、同样长度(16位,这个可能理解,毕竟我告诉密钥生成器我用的是AES)的数组,大神请看我白痴又想知道的眼神


...全文
90 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
专注写bug 2019-05-23
  • 打赏
  • 举报
回复
https://blog.csdn.net/qq_38322527/article/details/86571623
走好每一步 2019-05-23
  • 打赏
  • 举报
回复
如果你想要真正的随机数,就不要设种子,或者把种子设为电脑的时钟
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;
import java.util.Arrays;
 
public class Test {
    public static void main(String[] args) throws Exception {
        String password="01234567890123456789";
        System.out.println(Arrays.toString(password.getBytes()));
 
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom secureRandom = new SecureRandom(); 
        
        kgen.init(128, secureRandom);
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        System.out.println(Arrays.toString(enCodeFormat));
 
    }
}
走好每一步 2019-05-23
  • 打赏
  • 举报
回复
随机数生成器并不是真正的随机,只要种子一样,后面next就一样的 建议楼主去理解下数学上随机数生成器的原理 你试试下面的代码,把next去掉会怎么样
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;
import java.util.Arrays;
 
public class Test {
    public static void main(String[] args) throws Exception {
        String password="01234567890123456789";
        System.out.println(Arrays.toString(password.getBytes()));
 
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        SecureRandom secureRandom = new SecureRandom();
        secureRandom.setSeed(password.getBytes());
        
        byte[] bytes = new byte[password.getBytes().length];
        secureRandom.nextBytes(bytes);
        System.out.println(Arrays.toString(bytes));
        secureRandom.nextBytes(bytes);
        System.out.println(Arrays.toString(bytes));
        
        
        kgen.init(128, secureRandom);
        SecretKey secretKey = kgen.generateKey();
        byte[] enCodeFormat = secretKey.getEncoded();
        System.out.println(Arrays.toString(enCodeFormat));
 
    }
}
泡面3分钟 2019-05-23
  • 打赏
  • 举报
回复
天啊没有大佬,理一下我么,我不知道我问的问题是不是很蠢,但我想知道啊
我将带领大家全面分析HLS(M3U8),包括直播、点播、多码流、AES加密、切片、等。您将亲自动手来操练,搭建环境、学习理论,分析总结:m3u8+Nginx+OpenSSL+FFmpeg具体包括包括如下:HLS直播协议详解FFmpeg+Nginx+VLC打造M3U8点播FFmpeg+Nginx+VLC打造M3U8直播FFmpeg:M3U8的多码流自适应Win10快速安装OpenSSL(不用编译源码)FFmpeg:M3U8的AES加密 -------------------------------------------------------------------音视频是一门很复杂的技术,涉及的概念、原理、理论非常多,很多初学者不学基础理论,而是直接做项目,往往会看到c/c++的代码时一头雾水,不知道代码到底是什么意思,这是为什么呢? 因为没有学习音视频的基础理论,就比如学习英语,不学习基本单词,而是天天听英语新闻,总也听不懂。所以呢,一定要认真学习基础理论,然后再学习播放器、转码器、非编、流媒体直播、视频监控、等等。 梅老师从事音视频与流媒体行业18年;曾在永新视博、中科大洋、百度、美国Harris广播事业部等公司就职,经验丰富;曾亲手主导广电直播全套项目,精通h.264/h.265/aac,曾亲自参与百度app上的网页播放器等实战产品。 目前全身心自主创业,主要聚焦音视频+流媒体行业,精通音视频加密、流媒体在线转码快编等热门产品。

50,545

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧