Như đoạn code mẫu Google cho thanh toán trong ứng dụng nói, bạn nên xáo trộn khóa công khai này.
Thay vì chỉ lưu trữ toàn bộ chuỗi literal đây nhúng trong chương trình , xây dựng chìa khóa trong thời gian chạy từ mảnh hoặc sử dụng thao tác bit (ví dụ, XOR với một số chuỗi khác) để ẩn phím thực tế. Bản thân khóa không phải là thông tin bí mật, nhưng chúng tôi không muốn giúp kẻ tấn công dễ dàng thay thế khóa công khai bằng một số của riêng họ và sau đó là tin nhắn giả mạo từ máy chủ.
Tôi sử dụng mã Java rất đơn giản để tạo Lớp Java sẽ cung cấp cho tôi khóa công khai. Ý tưởng cơ bản là sử dụng đệ quy để tạo lại khóa bằng cách sử dụng lớp tĩnh bên trong. Nó chỉ là thức ăn cho suy nghĩ.
Đó là một "đủ tốt" cách tiếp cận đối với thị trường thích của tôi.Xem this stackexchange security question để biết thêm thông tin về việc làm xáo trộn.
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;
}
Nguồn
2014-06-27 09:31:03
Ứng dụng của bạn có thành phần máy chủ không? –
@JohnJSmith Xin chào John, có chứ :) – Genadinik