JAVA加密算法

1、加密算法简单介绍

SM1算法没有公开
不可逆加密:SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512、SM3(类似于md5) 哈希算法
可逆加密 SM2非对称算法、SM4对称加密算法、DES分组加密算法、3DES三重数据加密算法现已不推荐使用、RSA RSA算法、AES对称加密算法
Base64是编码方式,不算加密
	加密后位数
MD5 32位 salt
SHA-256 64位 salt
SHA-1 40位  salt
HMAC-SHA-256 64位  salt+密匙
可逆加密算法加密后位数不固定,是根据明文长度递增的,一般需扩8倍,最小为32位

2、算法实现

略,网上很多

				# AES加密在linux系统下加密结果不一致
				KeyGenerator secretGenerator = KeyGenerator.getInstance("AES");
                SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
                secureRandom.setSeed(publicKey.getBytes());
                secretGenerator.init(256, secureRandom);
                SecretKey secretKey = secretGenerator.generateKey();
                Cipher cipher = Cipher.getInstance("AES");
                cipher.init(mode, secretKey);
                return cipher.doFinal(rawText);
				
				# 错误写法
				KeyGenerator secretGenerator = KeyGenerator.getInstance("AES");
                secretGenerator.init(256, new SecureRandom(publicKey.getBytes()));
                SecretKey secretKey = secretGenerator.generateKey();
                Cipher cipher = Cipher.getInstance("AES");
                cipher.init(mode, secretKey);
                return cipher.doFinal(rawText);
注意:
大部分算法解密失败抛异常,比如SM4算法,但是AES算法解密失败不报异常,而是返回""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自写Java加密算法可能需要使用Java Cryptography Architecture (JCA) 提供的一系列类来实现。JCA定义了一些常用的密码学算法框架,如Cipher、MessageDigest、MAC、Signature等,可以用于实现各种加密、哈希、认证码和数字签名等算法。 要自写Java加密算法,您可以使用JCA提供的Cipher类。Cipher类提供了加密和解密的功能,可以使用不同的算法和模式进行加密,如对称加密算法、非对称加密算法、哈希函数等。您可以自定义算法和密钥来实现自己的加密算法。 首先,您需要选择合适的加密算法和模式。对称加密算法常见的有AES、DES、3DES等,非对称加密算法常见的有RSA、DSA等。然后,您需要使用Cipher类进行初始化,指定算法和模式,并传入密钥。接下来,您可以使用Cipher类的encrypt方法对数据进行加密,使用decrypt方法进行解密。 在自写加密算法时,需要注意安全性和效率。要确保加密算法的安全性,可以选择已经经过广泛测试和认可的算法。同时,为了提高效率,可以优化算法的实现方式,如使用合适的数据结构和算法细节优化。 使用JCA实现自己的加密算法有一些挑战和注意事项。首先,要了解JCA的使用方法和相关概念,熟悉各种算法的特性和适用场景。其次,要确保代码的可靠性和安全性,避免常见的安全漏洞和攻击。 总结起来,要自写Java加密算法,您可以使用JCA提供的类和接口,在此框架中定义和实现自己的算法。首先选择合适的加密算法和模式,然后使用Cipher类进行初始化并传入密钥,最后使用encrypt和decrypt方法进行加密和解密操作。但在实现时,需注意安全性和效率,并遵循相关的安全编码规范。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Java实现7种常见密码算法](https://blog.csdn.net/fm18771120556/article/details/127460019)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值