Java 使用SHA256算法后连接到字符串的Find value V在基于输入的最终散列中有x个零 私有静态字符串数据传输; 私有静态整数; 专用静态字符串cadenaV; 私有静态整数; 公共SHA256(字符串datosTransaccion,整数){ this.datomransaccion=datomransaccion; this.numeroCeros=numeroCeros; } 公共字符串算法(){ System.out.println(“Empezando el algoritmo de encriptacion”); 信息摘要; 字符串encriptado=“Error”; 试一试{ digest=MessageDigest.getInstance(“SHA-256”); 布尔值centinela=false; while(centinela==false){ numIntentos+=1; System.out.println(“意向编号:+numIntentos”); cadenaV=generadorCadenaV(); 系统输出打印LN(cadenaV); 字符串cadena=datosTransaccion+cadenaV; 系统输出打印(卡德纳); final byte[]hashbytes=digest.digest(cadena.getBytes(StandardCharsets.UTF_8)); int-cuenta=0; int numCeros=numeros/4; encriptado=bytesToHex(hashbytes); 系统输出打印LN(encriptado); 对于(int i=0;i

Java 使用SHA256算法后连接到字符串的Find value V在基于输入的最终散列中有x个零 私有静态字符串数据传输; 私有静态整数; 专用静态字符串cadenaV; 私有静态整数; 公共SHA256(字符串datosTransaccion,整数){ this.datomransaccion=datomransaccion; this.numeroCeros=numeroCeros; } 公共字符串算法(){ System.out.println(“Empezando el algoritmo de encriptacion”); 信息摘要; 字符串encriptado=“Error”; 试一试{ digest=MessageDigest.getInstance(“SHA-256”); 布尔值centinela=false; while(centinela==false){ numIntentos+=1; System.out.println(“意向编号:+numIntentos”); cadenaV=generadorCadenaV(); 系统输出打印LN(cadenaV); 字符串cadena=datosTransaccion+cadenaV; 系统输出打印(卡德纳); final byte[]hashbytes=digest.digest(cadena.getBytes(StandardCharsets.UTF_8)); int-cuenta=0; int numCeros=numeros/4; encriptado=bytesToHex(hashbytes); 系统输出打印LN(encriptado); 对于(int i=0;i,java,sha,Java,Sha,这里的主要问题是,我需要生成大小为1-7、值为a-z的V字符串,以便在我想要的字符串开始处获得0的数目。我的程序应该返回,但是太长了,而且永远不会结束。我需要一个线性的解决方案。成功输出的一个例子是: 这不是一个您可以快速解决的问题。SHA是专门设计的,所以快速解决这个问题非常困难。是的,但我的教授说,最长需要15分钟:(您的教授要求您亲自破解比特币?有问题:比特币以定义大小的块记录交易,并将所述块的加密哈希码链接起来以确保数据完整性。此外,比特币还包括一个称为“挖掘”的过程。);此过程必须针对

这里的主要问题是,我需要生成大小为1-7、值为a-z的V字符串,以便在我想要的字符串开始处获得0的数目。我的程序应该返回,但是太长了,而且永远不会结束。我需要一个线性的解决方案。成功输出的一个例子是:


这不是一个您可以快速解决的问题。SHA是专门设计的,所以快速解决这个问题非常困难。是的,但我的教授说,最长需要15分钟:(您的教授要求您亲自破解比特币?有问题:比特币以定义大小的块记录交易,并将所述块的加密哈希码链接起来以确保数据完整性。此外,比特币还包括一个称为“挖掘”的过程。);此过程必须针对每个块执行,并负责查找与块中已存在的事务连接的值(v),该值允许生成加密哈希码(ch)满足特定条件;这是Google中从西班牙语翻译成英语的类的项目指南的第一段。您的任务是编写一个Java程序:•它接收输入数据:(i)加密哈希代码生成算法,(ii)表示事务数据的字符串,以及(iii)指示搜索的零数的整数。•扫描搜索空间,查找值v,以使与v连接的字符串输入的加密哈希码在其开头具有所需的零数。
private static String datosTransaccion;
private static int numeroCeros;
private static String cadenaV;
private static int numIntentos;

public SHA256(String datosTransaccion, int numeroCeros) {
    this.datosTransaccion = datosTransaccion;
    this.numeroCeros = numeroCeros;
}

public String algoritmo() {
    System.out.println("Empezando el algoritmo de encriptacion");
    MessageDigest digest;
    String encriptado = "Error";
    try {
        digest = MessageDigest.getInstance("SHA-256");
        Boolean centinela = false;

        while (centinela == false) {
            numIntentos += 1;
            System.out.println("intento numero:" + numIntentos);
            cadenaV = generadorCadenaV();
            System.out.println(cadenaV);
            String cadena = datosTransaccion + cadenaV;
            System.out.println(cadena);
            final byte[] hashbytes = digest.digest(cadena.getBytes(StandardCharsets.UTF_8));
            int cuenta = 0;
            int numCeros = numeroCeros / 4;
            encriptado = bytesToHex(hashbytes);
            System.out.println(encriptado);
            for (int i = 0; i < numCeros - 1; i++) {
                if (encriptado.substring(i, i + 1).equals("0")) {
                    cuenta += 1;
                    System.out.println(cuenta);
                }
            }
            System.out.println(numeroCeros);
            if (cuenta * 4 == numeroCeros) {
                centinela = true;
            }
        }

        return encriptado;

    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }

    return encriptado;
}

private static String bytesToHex(byte[] hash) {
    StringBuilder hexString = new StringBuilder(2 * hash.length);
    for (int i = 0; i < hash.length; i++) {
        String hex = Integer.toHexString(0xff & hash[i]);
        if (hex.length() == 1) {
            hexString.append('0');
        }
        hexString.append(hex);
    }
    return hexString.toString();
}

public String generadorCadenaV() {
    int leftLimit = 97; // letra 'a'
    int rightLimit = 122; // letra 'z'
    Random rand = new Random();
    int targetStringLength = rand.nextInt(7) + 1; // longitud entre 1-7
    Random random = new Random();

    String cadenaV = random.ints(leftLimit, rightLimit + 1).limit(targetStringLength)
            .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append).toString();

    return cadenaV;
}

public String darCadenaV() {
    return cadenaV;
}

public int darIntentos() {
    return numIntentos;
}