㈠ ios开发中aes加密填充字节iv怎么填充
之前在项目上用到AES256加密解密算法,刚开始在java端加密解密都没有问题,在iOS端加密解密也没有问题。但是奇怪的是在java端加密后的文件在iOS端无法正确解密打开,然后简单测试了一下,发现在java端和iOS端采用相同明文,相同密钥加密后的密文不一样!上网查了资料后发现iOS中AES加密算法采用的填充是PKCS7Padding,而java不支持PKCS7Padding,只支持PKCS5Padding。我们知道加密算法由算法+模式+填充组成,所以这两者不同的填充算法导致相同明文相同密钥加密后出现密文不一致的情况。那么我们需要在java中用PKCS7Padding来填充,这样就可以和iOS端填充算法一致了。
要实现在java端用PKCS7Padding填充,需要用到bouncycastle组件来实现,下面我会提供该包的下载。啰嗦了一大堆,下面是一个简单的测试,上代码!
001 package com.encrypt.file;
002
003
004 import java.io.UnsupportedEncodingException;
005 importjava.security.Key;
006 import java.security.Security;
007
008 importjavax.crypto.Cipher;
009 importjavax.crypto.SecretKey;
010 importjavax.crypto.spec.SecretKeySpec;
011
012 public classAES256Encryption{
013
014 /**
015 * 密钥算法
016 * java6支持56位密钥,bouncycastle支持64位
017 * */
018 public static finalString KEY_ALGORITHM="AES";
019
020 /**
021 * 加密/解密算法/工作模式/填充方式
022 *
023 * JAVA6 支持PKCS5PADDING填充方式
024 * Bouncy castle支持PKCS7Padding填充方式
025 * */
026 public static finalString CIPHER_ALGORITHM="AES/ECB/PKCS7Padding";
027
028 /**
029 *
030 * 生成密钥,java6只支持56位密钥,bouncycastle支持64位密钥
031 * @return byte[] 二进制密钥
032 * */
033 public static byte[] initkey() throwsException{
034
035 // //实例化密钥生成器
036 // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
037 // KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC");
038 // //初始化密钥生成器,AES要求密钥长度为128位、192位、256位
039 //// kg.init(256);
040 // kg.init(128);
041 // //生成密钥
042 // SecretKey secretKey=kg.generateKey();
043 // //获取二进制密钥编码形式
044 // return secretKey.getEncoded();
045 //为了便于测试,这里我把key写死了,如果大家需要自动生成,可用上面注释掉的代码
046 return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
047 0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
048 0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
049 0x06, 0x07, 0x09, 0x0d };
050 }
051
052 /**
053 * 转换密钥
054 * @param key 二进制密钥
055 * @return Key 密钥
056 * */
057 public static Key toKey(byte[] key) throwsException{
058 //实例化DES密钥
059 //生成密钥
060 SecretKey secretKey=newSecretKeySpec(key,KEY_ALGORITHM);
061 returnsecretKey;
062 }
063
064 /**
065 * 加密数据
066 * @param data 待加密数据
067 * @param key 密钥
068 * @return byte[] 加密后的数据
069 * */
070 public static byte[] encrypt(byte[] data,byte[] key) throwsException{
071 //还原密钥
072 Key k=toKey(key);
073 /**
074 * 实例化
075 * 使用 PKCS7PADDING 填充方式,按如下方式实现,就是调用bouncycastle组件实现
076 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
077 */
078 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
079 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
080 //初始化,设置为加密模式
081 cipher.init(Cipher.ENCRYPT_MODE, k);
082 //执行操作
083 returncipher.doFinal(data);
084 }
085 /**
086 * 解密数据
087 * @param data 待解密数据
088 * @param key 密钥
089 * @return byte[] 解密后的数据
090 * */
091 public static byte[] decrypt(byte[] data,byte[] key) throwsException{
092 //欢迎密钥
093 Key k =toKey(key);
094 /**
095 * 实例化
096 * 使用 PKCS7PADDING 填充方式,按如下方式实现,就是调用bouncycastle组件实现
097 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
098 */
099 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
100 //初始化,设置为解密模式
101 cipher.init(Cipher.DECRYPT_MODE, k);
102 //执行操作
103 returncipher.doFinal(data);
104 }
105 /**
106 * @param args
107 * @throws UnsupportedEncodingException
108 * @throws Exception
109 */
110 public static void main(String[] args) {
111
112 String str="AES";
113 System.out.println("原文:"+str);
114
115 //初始化密钥
116 byte[] key;
117 try {
118 key = AES256Encryption.initkey();
119 System.out.print("密钥:");
120 for(int i = 0;i<key.length;i++){
121 System.out.printf("%x", key[i]);
122 }
123 System.out.print("\n");
124 //加密数据
125 byte[] data=AES256Encryption.encrypt(str.getBytes(), key);
126 System.out.print("加密后:");
127 for(int i = 0;i<data.length;i++){
128 System.out.printf("%x", data[i]);
129 }
130 System.out.print("\n");
131
132 //解密数据
133 data=AES256Encryption.decrypt(data, key);
134 System.out.println("解密后:"+newString(data));
135 } catch (Exception e) {
136 // TODO Auto-generated catch block
137 e.printStackTrace();
138 }
139
140 }
141 }
㈡ aescrypt是一个好的文件加密工具吗
aescrypt的确是一个文件加密的软件,它可以运行在多个操作系统上,比如windows,linux什么的。同时它采用的是业界通用的AES加密算法。
举例,如果你在windows上用的话,之需要右键点击一下文件,然后选择AES加密/解密,同时输入密码就好了。挺简单的。
㈢ 最好的免费视频加密软件是哪个
免费视频加密软件,行业内还真没发现完全免费的。视频加密软件,视频加密是指对视频数据进行保护,防止用户提取出视频的原始数据,防止未经授权的人随意观看,防止用户使用录屏软件进行录制。免费的不知道,但行业内早期最好的视频加密软件,不得不提超时代视频加密软件,这个软件一度占领整个视频加密领域,知名度也很高。
目前比较好用的是大黄蜂视频加密软件。它具备安全检测功能,可以检测虚拟机、对抗破解逆向工具、检测系统可疑翻录软件等。大黄蜂采用独特的视频编码技术,加密后的视频无法被还原回原文件。同时提供多种智能防翻录技术,严防各种可能的威胁。配备商家用户管理系统,可以通过帐号进行课程授权,帐号自动绑定用户电脑/手机。
六大优势功能模块
1.高强度加密防护:视频采用逐帧加密算法高强度加密破解逆向防护,虚拟机检测,模拟器检测绝非只是简单加壳或伪装加密。
2.智能防翻录检测:软件自动检测各种已知和未知的翻录软件,可以实时上报可疑翻录行为支持电脑和手机防翻录防截屏 支持多种水印模式,水印包含学生信息。
3.在线观看 离线观看:云端存储在线播放,学生使用更方便 支持离线观看,可以网络云盘导入,WIFI导入视频等方式。
4.联网授权 绑定设备:联网验证授权账号,登录后自动绑定设备,杜绝多人共用账号情况。后台可以控制课程授权,随时收回授权!
5.支持多平台播放:支持Windows,安卓手机/平板,iPhone/ iPad,Mac上播放加密视频。
6.后台管理系统:后台提供课程管理、学生管理、安全配置以及订单管理等功能,可以方便地维护学生信息和课程信息。
在线教学视频加密等功能,帮你打破防翻录、防破解技术壁垒,保护在线视频版权!
㈣ aes 128,192,256如何加密如何解密有没有在线工具在线加密,在线解密
....比如‘明文’用aes-ecb-256加密 zp填充 密码123 以utf8输出b64加密后就变成了‘/9+LAeoE=’解密就要反过来
所以你要知道你要解密的文件 加密方式 密码 填充 输出(二次加密) 和 编码 甚至还有偏移量所以 爆破?不存在的
㈤ 暴力破解AES加密需要什么工具
这个加密好像是不能破解的吧,只能暴力破解,如果加密位数太多,现在的计数是无法解密的