#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); } } } }