· 7 years ago · Feb 11, 2018, 04:26 PM
1package android.gonogo.pw.gonogo.Utils;
2
3import android.content.Context;
4import android.content.SharedPreferences;
5import android.provider.Settings;
6import android.support.annotation.Nullable;
7import android.util.Base64;
8
9import com.android.volley.Response;
10
11import java.util.Map;
12import java.util.Set;
13
14import javax.crypto.Cipher;
15import javax.crypto.SecretKey;
16import javax.crypto.SecretKeyFactory;
17import javax.crypto.spec.PBEKeySpec;
18import javax.crypto.spec.PBEParameterSpec;
19
20/**
21 * Created by vicostudio on 03/11/2017.
22 */
23
24public class ObscuredSharedPreferences implements SharedPreferences {
25
26 protected static final String UTF8 = "utf-8";
27 private static final String SEKRIT = "I1h7Y0l841,969p7" ;
28
29 protected SharedPreferences delegate;
30 protected Context context;
31
32 public ObscuredSharedPreferences(Context context, SharedPreferences delegate) {
33 this.delegate = delegate;
34 this.context = context;
35 }
36
37 public class Editor implements SharedPreferences.Editor {
38 protected SharedPreferences.Editor delegate;
39
40 public Editor() {
41 this.delegate = ObscuredSharedPreferences.this.delegate.edit();
42 }
43
44 @Override
45 public Editor putBoolean(String key, boolean value) {
46 delegate.putString(key, encrypt(Boolean.toString(value)));
47 return this;
48 }
49
50 @Override
51 public Editor putFloat(String key, float value) {
52 delegate.putString(key, encrypt(Float.toString(value)));
53 return this;
54 }
55
56 @Override
57 public Editor putInt(String key, int value) {
58 delegate.putString(key, encrypt(Integer.toString(value)));
59 return this;
60 }
61
62 @Override
63 public Editor putLong(String key, long value) {
64 delegate.putString(key, encrypt(Long.toString(value)));
65 return this;
66 }
67
68 @Override
69 public Editor putString(String key, String value) {
70 delegate.putString(key, encrypt(value));
71 return this;
72 }
73
74 @Override
75 public SharedPreferences.Editor putStringSet(String key, @Nullable Set<String> values) {
76 return null;
77 }
78
79 @Override
80 public void apply() {
81 delegate.apply();
82 }
83
84 @Override
85 public Editor clear() {
86 delegate.clear();
87 return this;
88 }
89
90 @Override
91 public boolean commit() {
92 return delegate.commit();
93 }
94
95 @Override
96 public Editor remove(String s) {
97 delegate.remove(s);
98 return this;
99 }
100 }
101
102 public Editor edit() {
103 return new Editor();
104 }
105
106
107 @Override
108 public Map<String, ?> getAll() {
109 throw new UnsupportedOperationException(); // left as an exercise to the reader
110 }
111
112 @Override
113 public boolean getBoolean(String key, boolean defValue) {
114 final String v = delegate.getString(key, null);
115 return v!=null ? Boolean.parseBoolean(decrypt(v)) : defValue;
116 }
117
118 @Override
119 public float getFloat(String key, float defValue) {
120 final String v = delegate.getString(key, null);
121 return v!=null ? Float.parseFloat(decrypt(v)) : defValue;
122 }
123
124 @Override
125 public int getInt(String key, int defValue) {
126 final String v = delegate.getString(key, null);
127 return v!=null ? Integer.parseInt(decrypt(v)) : defValue;
128 }
129
130 @Override
131 public long getLong(String key, long defValue) {
132 final String v = delegate.getString(key, null);
133 return v!=null ? Long.parseLong(decrypt(v)) : defValue;
134 }
135
136 @Override
137 public String getString(String key, String defValue) {
138 final String v = delegate.getString(key, null);
139 return v != null ? decrypt(v) : defValue;
140 }
141
142 @Nullable
143 @Override
144 public Set<String> getStringSet(String key, @Nullable Set<String> defValues) {
145 return null;
146 }
147
148 @Override
149 public boolean contains(String s) {
150 return delegate.contains(s);
151 }
152
153 @Override
154 public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
155 delegate.registerOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
156 }
157
158 @Override
159 public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener onSharedPreferenceChangeListener) {
160 delegate.unregisterOnSharedPreferenceChangeListener(onSharedPreferenceChangeListener);
161 }
162
163
164
165
166 protected String encrypt( String value ) {
167
168 try {
169 final byte[] bytes = value!=null ? value.getBytes(UTF8) : new byte[0];
170 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
171 SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT.toCharArray()));
172 Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
173 pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID).getBytes(UTF8), 20));
174 return new String(Base64.encode(pbeCipher.doFinal(bytes), Base64.NO_WRAP),UTF8);
175
176 } catch( Exception e ) {
177 throw new RuntimeException(e);
178 }
179
180 }
181
182 protected String decrypt(String value){
183 try {
184 final byte[] bytes = value!=null ? Base64.decode(value,Base64.DEFAULT) : new byte[0];
185 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
186 SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT.toCharArray()));
187 Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
188 pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID).getBytes(UTF8), 20));
189 return new String(pbeCipher.doFinal(bytes),UTF8);
190
191 } catch( Exception e) {
192 throw new RuntimeException(e);
193 }
194 }
195
196}