首页 > 编程语言 >【JAVA】算法

【JAVA】算法

时间:2023-10-07 18:22:22浏览次数:38  
标签:java String public 算法 new StandardCharsets import JAVA

start

 1.SHA-256算法(单向、验证完整性/一致性,暂时安全

 1 import java.nio.charset.StandardCharsets;
 2 import java.security.MessageDigest;
 3 import java.security.NoSuchAlgorithmException;
 4 
 5 public class SHA256Example {
 6 
 7     public static String hashWithSHA256(String text) {
 8 
 9         try {
10             MessageDigest digest = MessageDigest.getInstance("SHA-256");
11             byte[] hash = digest.digest(text.getBytes(StandardCharsets.UTF_8));
12             return bytesToHexString(hash);
13         } catch (NoSuchAlgorithmException e) {
14             throw new RuntimeException("Error: Unable to find SHA-256 algorithm.", e);
15         }
16 
17     }
18 
19     public static String bytesToHexString(byte[] bytes) {
20         StringBuilder hexString = new StringBuilder();
21         for (byte b : bytes) {
22             String hex = Integer.toHexString(0xff & b);
23             if (hex.length() == 1) {
24                 hexString.append("0");
25             }
26             hexString.append(hex);
27         }
28         return hexString.toString();
29     }
30 
31     public static void main(String[] args) {
32         String text = "Hello,World!";
33         String sha256hash = hashWithSHA256(text);
34         System.out.println("Original:" + text);
35         System.out.println("SHA-256:" + sha256hash);
36     }
37 
38 }

 

 2.MD5算法(单向、验证完整性、一致性,有安全漏洞

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Example {
    public static String getMD5Hash(String text) {
        try {
            MessageDigest mDigest = MessageDigest.getInstance("MD5");
            byte[] hashBytes = mDigest.digest(text.getBytes(StandardCharsets.UTF_8));
            StringBuilder sBuilder = new StringBuilder();
            for (byte b : hashBytes) {
                sBuilder.append(String.format("%02x", b));
            }
            return sBuilder.toString();
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 algorithm not found", e);
        }
    }

    public static void main(String[] args) {
        String text = "Hello,world!";
        String md5Hash = getMD5Hash(text);
        System.out.println("Original:" + text);
        System.out.println("MD5:" + md5Hash);
    }

}

 

 3.SHA3-256算法()

import org.bouncycastle.jcajce.provider.digest.SHA3;
import org.bouncycastle.util.encoders.Hex;

import java.nio.charset.StandardCharsets;

public class SHA3_256Example {
    public static void main(String[] args) {
        String input = "Hello, World!";
        String sha3_256Hash = getSHA3_256Hash(input);
        System.out.println("SHA3-256 Hash: " + sha3_256Hash);
    }

    public static String getSHA3_256Hash(String input) {
        // 创建一个SHA3.Digest256实例
        SHA3.Digest256 digest = new SHA3.Digest256();

        // 对输入的字符串进行散列
        byte[] hashBytes = digest.digest(input.getBytes(StandardCharsets.UTF_8));

        // 将散列后的字节数组转换为十六进制字符串
        return new String(Hex.encode(hashBytes));
    }
}

Java8以前需要第三方库支持。

<dependencies>
    <!-- Other dependencies -->
    <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcprov-jdk15on</artifactId>
        <version>1.70</version>
    </dependency>
</dependencies>

Java9开始,JDK中已经支持SHA3-256的算法。无需第三方。

 3.AES算法(对称加密算法)

import java.nio.charset.StandardCharsets;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;

public class AESExample {
    public AESExample() {
        String input = "Hello,World!";
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(256);
            SecretKey secretKey = keyGenerator.generateKey();

            // 加密
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedData = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
            String encryptedDataString = Base64.getEncoder().encodeToString(encryptedData);
            System.out.println("Encrypted data:" + encryptedDataString);

            // 解密
            cipher.init(Cipher.DECRYPT_MODE, secretKey);
            byte[] decryptedData = cipher.doFinal(encryptedData);
            String decryptedDataString = new String(decryptedData, StandardCharsets.UTF_8);
            System.out.println("Decrypted data:" + decryptedDataString);

        } catch (Exception e) {
            throw new RuntimeException("Error:", e);
        }
    }

    public static void main(String[] args) {
        new AESExample();
    }
}

4.RSA算法(非对称加密算法)

import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAExample {
    public static void main(String[] args) {
        String input = "Hello,world!";

        try {
            // 生成SA密钥
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(2048);
            KeyPair keyPair = keyPairGenerator.generateKeyPair();
            // 公钥
            PublicKey publicKey = keyPair.getPublic();
            System.out.println("公钥:"+publicKey.toString());
            // 私钥
            PrivateKey privateKey = keyPair.getPrivate();
            System.out.println("私钥:"+privateKey.toString());

            // 使用公钥加密数据
            Cipher cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, publicKey);
            byte[] encryptedData = cipher.doFinal(input.getBytes(StandardCharsets.UTF_8));
            String encryptedDataString = Base64.getEncoder().encodeToString(encryptedData);
            System.out.println("Encryted Data:" + encryptedDataString);

            // 使用私钥解密数据
            cipher.init(Cipher.DECRYPT_MODE, privateKey);
            byte[] decrytedData = cipher.doFinal(encryptedData);
            String decrytedDataString = new String(decrytedData, StandardCharsets.UTF_8);
            System.out.println("Decryted Data:" + decrytedDataString);

        } catch (Exception e) {
            throw new RuntimeException("Error:", e);
        }
    }
}

 

 end

标签:java,String,public,算法,new,StandardCharsets,import,JAVA
From: https://www.cnblogs.com/lnsylt/p/17746649.html

相关文章

  • 【93】基于java的校园课程作业管理系统设计与实现
    本章节给大家带来一个基于java校园课程作业管理系统设计与实现,可适用于班级管理、学生管理、教师管理、课程管理、课程信息管理、学生选课管理、作业布置管理、作业提交管理、作业评分管理、课程评价管理、课程资源管理,作业管理系统,大学提交作业,布置作业管理系统,学校作业管理系统......
  • JavaWeb
    JavaWeb开发是指使用Java技术进行Web应用程序开发,包括前端页面、后端业务逻辑、数据库交互等方面。JavaWeb开发是目前Web应用程序开发领域中最常用的技术之一,其优势在于稳定、安全、可扩展性强。JavaWeb开发主要涉及以下几个方面:1.ServletServlet是JavaWeb开发中最基础的......
  • Java异常(Exception)
    Java异常(Exception)Java异常是在程序执行过程中出现的错误或异常情况。异常可以分为编译时异常和运行时异常异常的分类Java中的异常分为两种类型:已检查异常(checkedexception)和运行时异常(runtimeexception)。已检查异常是在编译时被检查的异常,必须在代码中进行处理或声......
  • Java中的String
    在Java中,字符串(String)是一种常见的数据类型,用于表示一系列字符。String类是Java中的一个内置类,提供了许多有用J的方法,使得字符串的处理变得更加方便和高效。本文将介绍Java中String类的一些基本用法和常见应用场景。创建字符串在Java中,可以使用双引号("")或单引号('')来创建字符......
  • java基础知识总结,javaweb参考资料大全
    Java基础知识总结写代码:1,明确需求。我要做什么?2,分析思路。我要怎么做?1,2,3。3,确定步骤。每一个思路部分用到哪些语句,方法,和对象。4,代码实现。用具体的java语言代码把思路体现出来。 学习新技术的四点:1,该技术是什么?2,该技术有什么特点(使用注意):3,该技术怎么使用。demo4,该技术什么时......
  • Lnton羚通算法算力云平台视频监控分析安全帽穿戴识别 安全帽识别预警系统
    Lnton羚通的算法算力云平台有以下显著特点:高性能、高可靠性、高可扩展性和低成本。用户可以通过该云平台获取高效、强大的算法计算服务,快速而灵活地运行各种复杂的计算模型和算法。该平台广泛涵盖机器学习、人工智能、大数据分析和图像识别等领域。此外,云平台还提供丰富的算法库和......
  • java web开发入门学习笔记(手打超细版)
    我刚实习的时候写的,先分享分享吧,当时写的也不容易。有错的话请指出,博主会修正,适合入门小白当资料使用。包括包括java基础、数据库、js、jQuery、css、html等等知识点。详细笔记内容如下:面向对象封装:属性私有化,实现细节私有化,对外提供公共的访问方式。属性私有化,对外提供操作该属性......
  • 牛客刷java记录第5天
    第一题,下列代码运行结果是?classX{Yy=newY();publicX(){System.out.print("X");}}classY{publicY(){System.out.print("Y");}}publicclassZextendsX{Yy=newY();publicZ(){......
  • 算法:打印斐波那契数列的前30项(JS)
    打印斐波那契数列的前30项提示:斐波那契数列的前两项是1,其他项是之前两项之和1functionfibonacciIterative(n){2if(n<=0){//如果输入的n小于等于0,表示输入错误,返回错误提示3return"输入错误,请输入正整数";4}5leta=1;//初始化......
  • 算法:九九乘法表(JS)
    九九乘法表1functioncreateMultiplicationTable(){2lettable='';//创建一个空字符串用于存储乘法表3for(leti=1;i<=9;i++){//外层循环控制行数,从1到94for(letj=1;j<=i;j++){//内层循环控制每行的列数,从1到当前行数i......