Ⅰ java的琐是什么有几种锁几种锁的区别又是什么
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。
Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人复制而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢?
以色列阿拉丁公司提供的*** HL加密锁提供的外壳加密工具中有一个叫做数据加密的功能,这个功能能更好的防止去除api的调用,各位都知道:硬件加密锁的保护原理就是要您被加密过的软件和加密锁的硬件要紧紧地结合在一起,而且不容易被轻易的剔出原来的调用,这样才能更好的保证您的软件不被盗版,同时这种方式也很容易被程序员掌握,要对一个软件实现保护,只需要几分钟的时间就可以了,下面简单介绍一下他的原理:
运用阿拉丁公司提供的外壳工具先把调用您的java解释器来进行加密,那么就是说如果要运用这个解释器就需要有一把特定的加密锁存在,然后我们再运用它提供的外壳加密工具中的内容加密,把您写好的java程序当作一个文件来处理而对他进行加密,这个加密是采用的AES128位的算法的,这样这个加密过的数据文件??您的软件就只能被您保护过的java解释器来进行解释,但是在没有加密锁的情况下就不能够运行您的软件,从而达到真正保护您的软件的目的。
Ⅱ AES算法加解密:java.security.InvalidKeyException: Illegal key size
在处理AES算法加解密时,遇到了一个“java.security.InvalidKeyException: Illegal key size”的错误,这个错误在本地环境运行没有问题,但推送到线上环境后出现。通过搜索引擎,发现这个问题可能与软件受到美国出口管制有关,超过128位密钥大小时,需要替换“local_policy.jar”和“US_export_policy.jar”两个文件。在本地环境,替换这两个文件后问题得到解决,但在线上环境,问题依旧存在。进一步分析发现,线上环境与本地环境使用的JDK版本不同(本地JDK8 u221,线上JDK8 u101),这可能与JDK版本不一致有关,导致问题重现。查看JDK安装目录下的“security”文件夹,确认了线上和本地JDK文件的不同。尝试解决该问题的方法有:手动替换“local_policy.jar”和“US_export_policy.jar”文件或升级JDK版本。但考虑到线下处理的复杂性,有人建议使用第三方库“BouncyCastle”。虽然使用“BouncyCastle”进行解密尝试,但问题依旧没有解决。进一步的思考中,意识到可能需要通过代码方式改变运行策略来解决这个问题。在Stackoverflow上找到了解决思路,即使用反射修改加密策略,通过代码实现,无需手动替换文件或更新JDK版本。Oracle官方在JDK8 u151 Release Notes中提到,新增了一个控制加密策略的特性,使得在不手动添加包的情况下,可以扩展密钥位数。最后的总结是,保持开发环境、测试环境和线上环境使用的JDK版本一致,可以避免不必要的时间浪费,同时,通过代码方式修改加密策略提供了一种更高效、灵活的解决方案。
Ⅲ JAVA AES加密
这篇文章有详细的AES算法的使用讲解,希望可以帮助到你,https://blog.csdn.net/xingkong_hdc/article/details/79413462
Ⅳ java使用pkcs7padding为什么报错
首先准备一份明文和秘钥:
var plaintText = 'aaaaaaaaaaaaaaaa'; // 明文
var keyStr = 'bbbbbbbbbbbbbbbb'; // 一般key为一个字符串
参看官网文档,AES方法是支持AES-128、AES-192和AES-256的,加密过程中使用哪种加密方式取决于传入key的类型,否则就会按照AES-256的方式加密。
CryptoJS supports AES-128, AES-192, and AES-256. It will pick the variant by the size of the key you pass in. If you use a passphrase, then it will generate a 256-bit key.
由于Java就是按照128bit给的,但是由于是一个字符串,需要先在前端将其转为128bit的才行。
Ⅳ 求一个java算法,用128位密钥的AES加密128位明文,得出的密文还是128位...很着急,非常感谢各位大神,求救!
/**
* 加密
*
* @param content 需要加密的内容
* @param password 加密密码
* @return
*/
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
byte[] result = cipher.doFinal(byteContent);
return result; // 加密
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
Ⅵ 如何把以下 java AES-128-CBC 加密方法改为 php 的实现
$key = hash('md5', $key, true);
$iv = '';
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$input = Security::pkcs5_pad($input, $size);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $input, MCRYPT_MODE_CBC, $iv);
// output wd/OTHoIXwgHGDHcj8OTgg==
echo base64_encode($encrypted);