· 7 years ago · Sep 13, 2018, 05:36 PM
1final SharedPreferences prefs = new ObscuredSharedPreferences(
2 this, this.getSharedPreferences("MY_PREFS_FILE_NAME", Context.MODE_PRIVATE)) {
3 @Nullable
4 @Override
5 public Set<String> getStringSet(String key, @Nullable Set<String> defValues) {
6 return null;
7 }
8 };
9
10//Write
11prefs.edit().putString("1597", String.valueOf(cc)).commit();
12//Read
13prefs.getString("1597", null);
14
15public abstract class ObscuredSharedPreferences implements SharedPreferences {
16protected static final String UTF8 = "utf-8";
17public static final char[] SEKRIT = {1597} ; // INSERT A RANDOM PASSWORD HERE.
18// Don't use anything you wouldn't want to
19// get out there if someone decompiled
20// your app.
21
22
23protected SharedPreferences delegate;
24protected Context context;
25
26public ObscuredSharedPreferences(Context context, SharedPreferences delegate) {
27 this.delegate = delegate;
28 this.context = context;
29}
30
31public abstract class Editor implements SharedPreferences.Editor {
32 protected SharedPreferences.Editor delegate;
33
34 public Editor() {
35 this.delegate = ObscuredSharedPreferences.this.delegate.edit();
36 }
37
38 @Override
39 public Editor putBoolean(String key, boolean value) {
40 delegate.putString(key, encrypt(Boolean.toString(value)));
41 return this;
42 }
43
44 @Override
45 public Editor putFloat(String key, float value) {
46 delegate.putString(key, encrypt(Float.toString(value)));
47 return this;
48 }
49
50 @Override
51 public Editor putInt(String key, int value) {
52 delegate.putString(key, encrypt(Integer.toString(value)));
53 return this;
54 }
55
56 @Override
57 public Editor putLong(String key, long value) {
58 delegate.putString(key, encrypt(Long.toString(value)));
59 return this;
60 }
61
62 @Override
63 public Editor putString(String key, String value) {
64 delegate.putString(key, encrypt(value));
65 return this;
66 }
67
68 @Override
69 public void apply() {
70 delegate.apply();
71 }
72
73 @Override
74 public Editor clear() {
75 delegate.clear();
76 return this;
77 }
78
79 @Override
80 public boolean commit() {
81 return delegate.commit();
82 }
83
84 @Override
85 public Editor remove(String s) {
86 delegate.remove(s);
87 return this;
88 }
89}
90
91public Editor edit() {
92 return new Editor() {
93 @Override
94 public SharedPreferences.Editor putStringSet(String key, @Nullable Set<String> values) {
95 return null;
96 }
97 };
98}
99
100
101@Override
102public Map<String, ?> getAll() {
103 throw new UnsupportedOperationException(); // left as an exercise to the reader
104}
105
106@Override
107public boolean getBoolean(String key, boolean defValue) {
108 final String v = delegate.getString(key, null);
109 return v!=null ? Boolean.parseBoolean(decrypt(v)) : defValue;
110}
111
112@Override
113public float getFloat(String key, float defValue) {
114 final String v = delegate.getString(key, null);
115 return v!=null ? Float.parseFloat(decrypt(v)) : defValue;
116}
117
118@Override
119public int getInt(String key, int defValue) {
120 final String v = delegate.getString(key, null);
121 return v!=null ? Integer.parseInt(decrypt(v)) : defValue;
122}
123
124@Override
125public long getLong(String key, long defValue) {
126 final String v = delegate.getString(key, null);
127 return v!=null ? Long.parseLong(decrypt(v)) : defValue;
128}
129
130@Override
131public String getString(String key, String defValue) {
132 final String v = delegate.getString(key, null);
133 return v != null ? decrypt(v) : defValue;
134}
135
136@Override
137public boolean contains(String s) {
138 return delegate.contains(s);
139}
140
141@Override
142public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
143 delegate.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
144}
145
146@Override
147public void unregisterOnSharedPreferenceChangeListener(SharedPreferences.OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
148 delegate.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
149}
150
151
152
153
154protected String encrypt( String value ) {
155
156 try {
157 final byte[] bytes = value!=null ? value.getBytes(UTF8) : new byte[0];
158 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
159 SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT));
160 Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
161 pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID).getBytes(UTF8), 20));
162 return new String(Base64.encode(pbeCipher.doFinal(bytes), Base64.NO_WRAP),UTF8);
163
164 } catch( Exception e ) {
165 throw new RuntimeException(e);
166 }
167
168}
169
170protected String decrypt(String value){
171 try {
172 final byte[] bytes = value!=null ? Base64.decode(value,Base64.DEFAULT) : new byte[0];
173 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
174 SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT));
175 Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
176 pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID).getBytes(UTF8), 20));
177 return new String(pbeCipher.doFinal(bytes),UTF8);
178
179 } catch( Exception e) {
180 throw new RuntimeException(e);
181 }
182}