Шифр пароля программного контроллера TP-Link Omada

#mongodb

Вопрос:

 user_name:"test" password:"NhNq8N6pbpj/GXiTYVP41A=="  

Пароль в открытом виде — «лала». Это свойства из документа JSON, из экземпляра MongoDB программного контроллера TP-Link Omada.

Если у кого-нибудь есть информация о шифре, используемом для расшифровки «лала», это решило бы мою проблему. Пользовательский интерфейс для программного обеспечения уже имеет функцию массового импорта/экспорта пользователей, но в нем есть ошибка, и он не функционирует. Был отключен для многих предыдущих версий, не уверен, с каких именно, и все еще отключен в текущей версии 4.4.6.

Я могу автоматизировать добавление локального пользователя, напрямую сохранив JSON пользователя в MongoDB, но пароль должен храниться с использованием определенного шифра, который не задокументирован и неизвестен.

Любая помощь будет признательна.

Комментарии:

1. Это похоже на 16-байтовый хэш в кодировке base64. Может быть, md5?

2. @Джо: к сожалению, нет. Попробовал 16-байтовый base64 и md5, но все равно не повезло. Спасибо вам за вашу помощь.

Ответ №1:

 public void setPassword(String password) {  this.password = com.tplink.omada.common.util.b.a.c(password);  }  

Блок-цитата

 package com.tplink.omada.common.util.b;     import java.io.UnsupportedEncodingException; import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; import org.slf4j.Logger; import org.slf4j.LoggerFactory;     public class a {  private static final Logger a = LoggerFactory.getLogger(a.class);  private static final byte[] b = new byte[]{73, 30, 95, 35, -84, -65, -98, -76};      public static byte[] a(String var0) {  try {  return com.tplink.omada.common.util.b.b.b(var0);  } catch (Exception var2) {  a.error(var2.toString(), var2);  return null;  }  }      public static String a(byte[] var0) {  try {  return com.tplink.omada.common.util.b.b.c(var0);  } catch (Exception var2) {  a.error(var2.toString(), var2);  return null;  }  }      public static String b(byte[] var0) {  return new String(k.b(var0, 0), StandardCharsets.UTF_8);  }      public static byte[] b(String var0) throws NoSuchAlgorithmException {  Object var1 = null;  KeyGenerator var2 = KeyGenerator.getInstance("AES");  SecureRandom var3 = SecureRandom.getInstance("SHA1PRNG");  var3.setSeed(var0.getBytes(StandardCharsets.UTF_8));  var2.init(128, var3);  SecretKey var4 = var2.generateKey();  byte[] var5 = var4.getEncoded();  return var5;  }      public static byte[] a(String var0, String var1) {  try {  SecretKeySpec var2 = new SecretKeySpec(b(var1), "AES");  Cipher var3 = Cipher.getInstance("AES");  byte[] var4 = var0.getBytes("UTF-8");  var3.init(1, var2);  return var3.doFinal(var4);  } catch (Exception var5) {  a.warn(var5.toString(), var5);  return null;  }  }      public static byte[] a(byte[] var0, String var1) {  try {  SecretKeySpec var2 = new SecretKeySpec(b(var1), "AES");  Cipher var3 = Cipher.getInstance("AES");  var3.init(2, var2);  return var3.doFinal(var0);  } catch (Exception var4) {  a.warn(var4.toString(), var4);  return null;  }  }        // ========== begin password fiasco =============  public static String c(String var0) {  if (var0 == null) {  return null;  } else {  byte[] var1 = a(var0, b(b));  return a(var1);  }  }  // ============ end password fiasco =============      public static String d(String var0) {  if (var0 == null) {  return null;  } else {  byte[] var1 = a(var0);  byte[] var2 = a(var1, b(b));      try {  return new String(var2, "UTF-8");  } catch (UnsupportedEncodingException var4) {  a.warn(var4.toString(), var4);  return new String(var2);  }  }  } }