如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
散列算法(Hashing Algorithm)是一种将任意长度的输入数据转换为固定长度的输出数据(通常是固定大小的哈希值)的数学函数。
固定长度输出:无论输入数据的大小如何,散列算法生成的哈希值都具有相同的固定长度。
高效性:散列算法通常具有高度的计算效率,能够快速生成哈希值。
不可逆性:散列算法是单向的,即从哈希值无法还原出原始数据。这意味着无法通过哈希值来获取原始数据的内容。
唯一性:不同的输入数据经过散列算法处理后应该生成不同的哈希值,但由于输出长度是固定的,可能会发生哈希冲突,即不同的输入生成相同的哈希值。
相似输入产生不同输出:即使输入数据只有微小的变化,也会导致生成完全不同的哈希值。这被称为“雪崩效应”。
注意的是散列算法生成固定长度的哈希值,但是哈希值是不可逆的,无法还原回原始数据。
SHA-256(Secure Hash Algorithm 256-bit)是一个加密哈希函数,它的设计目标是尽可能地降低哈希冲突的概率,即不同的输入数据尽量生成不同的哈希值。SHA-256 算法的输出长度是256位(32字节),这意味着它可以表示的不同哈希值数量非常庞大,大约为 2^256(约等于 1.1579209e+77)个。
由于SHA-256 算法的输出空间如此巨大,理论上来说,对于不同的输入数据,生成相同的SHA-256哈希值的可能性是极其微小的,几乎可以忽略不计。这种微小的可能性通常只有在恶意的攻击(如碰撞攻击)或者算法本身存在漏洞的情况下才会出现。
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class SHA {
public static String encrypt(String msg){
MessageDigest digest = null;
try {
digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(msg.getBytes());
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
hexString.append(String.format("%02x", b));
}
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
// 处理算法不可用的情况
e.printStackTrace();
}
return null;
}
}
测试类:
import lombok.extern.slf4j.Slf4j;
import org.example.DemoCommonTool;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoCommonTool.class)
@Slf4j
public class SHATest {
@Test
public void test(){
for (int i = 0;i<20;i++) {
log.info("========================start==================================");
log.info(SHA.encrypt("sahihalfh那可是当年卢卡斯电话撒豆i阿娇哦i骄傲啊搜饿哦i回复还是分开爱上了凯迪拉克三分而我和日和坊双方的哈利好的啊合法身份安徽疯狂撒法鲁克安家费 "));
log.info(SHA.encrypt("还是分开23432 和开发建设234 大佬"));
log.info(SHA.encrypt("DSHFKJ32"));
log.info("========================end==================================");
}
}
}
测试结果:
测试成功!!!