Come dice il codice di esempio di Google per la fatturazione in-app, è necessario nascondere questa chiave pubblica.
Invece di memorizzare l'intera stringa letterale qui incorporato nel programma , costruire la chiave in fase di esecuzione da pezzi o manipolazione uso bit (per esempio, XOR con qualche altra stringa) per nascondere chiave effettiva. La chiave in sé non è informazione segreta, ma non lo facciamo per rendere più facile per un utente malintenzionato sostituire la chiave pubblica con uno proprio e quindi falsi messaggi dal server.
Io uso un codice Java molto semplice per generare la classe Java che mi restituirà la chiave pubblica. L'idea di base è usare la ricorsione per ricreare la chiave usando la classe statica interna. È solo spunti di riflessione.
È un approccio "abbastanza buono" per il mio mercato di nicchia.Vedere this stackexchange security question per ulteriori informazioni su offuscamento.
public static void main(String[] args) throws Exception {
String className = genClassName();
PrintWriter writer = new PrintWriter("C:\\" + className + ".java", "iso-8859-1");
printClass(className, writer, "XXXXXX-YOUR-PUBLIC-KEY-GOES-HERE-XXXXXXX", true);
writer.close();
}
private static String genClassName() {
return "Class" + UUID.randomUUID().toString().replaceAll("-", "");
}
private static String printClass(String thisClass, PrintWriter writer, String key, boolean root) {
int split = key.length()/2;
if (split < 10) {
writer.println("public " + (root ? "" : "static") + " class " + thisClass + " {");
writer.println("public static String get() {");
writer.println("return \"" + key + "\";");
writer.println("}");
writer.println("}");
} else {
String first = key.substring(0, split);
String last = key.substring(split, key.length());
writer.println("public " + (root ? "" : "static") + " class " + thisClass + " {");
String class1 = printClass(genClassName(), writer, first, false);
String class2 = printClass(genClassName(), writer, last, false);
writer.println("public static String get() {");
writer.println("return " + class1 + ".get() + " + class2 + ".get();");
writer.println("}");
writer.println("}");
}
return thisClass;
}
fonte
2014-06-27 09:31:03
La tua app ha un componente server? –
@JohnJSmith Ciao John, sì lo fa :) – Genadinik