问题描述
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;
}
这里的主要问题是我需要使用值 a-z 生成大小为 1-7 的 V 字符串,以便在我想要的字符串开头获得 0 的数量。我的程序应该返回它,但它太长而且永远不会结束。我需要一个线性解决方案。一个成功输出的例子是:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)