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
这里的主要问题是,我需要生成大小为1-7、值为a-z的V字符串,以便在我想要的字符串开始处获得0的数目。我的程序应该返回,但是太长了,而且永远不会结束。我需要一个线性的解决方案。成功输出的一个例子是: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分钟:(您的教授要求您亲自破解比特币?有问题:比特币以定义大小的块记录交易,并将所述块的加密哈希码链接起来以确保数据完整性。此外,比特币还包括一个称为“挖掘”的过程。);此过程必须针对
这不是一个您可以快速解决的问题。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;
}