ToB企服应用市场:ToB评测及商务社交产业平台

标题: SHA加密在实际应用中的优势与局限 [打印本页]

作者: 农妇山泉一亩田    时间: 2024-4-18 10:03
标题: SHA加密在实际应用中的优势与局限

SHA在线加密 | 一个覆盖广泛主题工具的高效在线平台(amd794.com)
https://amd794.com/sha

基于这些特性,SHA加密算法在保证数据完整性方面具有较高的安全性。

局限:


 java[code]import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.nio.charset.StandardCharsets;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;public class SHAExample {    public static void main(String[] args) throws Exception {        String input = "Hello, World!";        String secretKey = "0123456789abcdef0123456789abcdef0123456789abcdef";        // 加密        String encryptedText = encrypt(input, secretKey);        System.out.println("加密后的文本: " + encryptedText);        // 解密        String decryptedText = decrypt(encryptedText, secretKey);        System.out.println("解密后的文本: " + decryptedText);    }    public static String encrypt(String plainText, String secretKey) throws Exception {        Mac mac = Mac.getInstance("HmacSHA256");        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");        mac.init(secretKeySpec);        byte[] encryptedBytes = mac.doFinal(plainText.getBytes(StandardCharsets.UTF_8));        return bytesToHex(encryptedBytes);    }    public static String decrypt(String encryptedText, String secretKey) throws Exception {        Mac mac = Mac.getInstance("HmacSHA256");        SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");        mac.init(secretKeySpec);        byte[] encryptedBytes = hexToBytes(encryptedText);        byte[] decryptedBytes = mac.doFinal(encryptedBytes);        return new String(decryptedBytes, StandardCharsets.UTF_8);    }    public static String bytesToHex(byte[] bytes) {        StringBuilder sb = new StringBuilder();        for (byte b : bytes) {            sb.append(String.format("%02x", b));        }        return sb.toString();    }    public static byte[] hexToBytes(String hex) {        byte[] bytes = new byte[hex.length() / 2];        for (int i = 0; i < hex.length(); i += 2) {            bytes[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16)




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4