在之前的文章中,我们将用户的密码使用SharedPreferences存储,我们打开/data/data/com.wuyudong.mobilesafe/shared_prefs文件夹下的 config.xml 文件,导入到本地,查看内容:

XML/HTML代码
  1. xml?version='1.0'?encoding='utf-8'?standalone='yes'??>??
  2. <map>??
  3. ????<string?name="mobile_safe_psd">123string>??
  4. ????<boolean?name="open_update"?value="false"?/>??
  5. map>??

  密码居然使用的是明文,这样是非常不安全的。这里采用md5加密

  编写Md5Util工具类,代码如下:

Java代码
  1. package?com.wuyudong.mobilesafe.Utils;??
  2. ??
  3. /**?
  4. ?*?Created?by?wuyudong?on?2016/10/9.?
  5. ?*/??
  6. ??
  7. import?java.security.MessageDigest;??
  8. import?java.security.NoSuchAlgorithmException;??
  9. ??
  10. public?class?Md5Util?{??
  11. ????/**?
  12. ?????*?给指定字符串按照md5算法去加密?
  13. ?????*?
  14. ?????*?@param?psd?需要加密的密码????加盐处理?
  15. ?????*?@return?md5后的字符串?
  16. ?????*/??
  17. ????public?static?String?encoder(String?psd)?{??
  18. ????????try?{??
  19. ????????????//加盐处理??
  20. ????????????psd?=?psd?+?"mobilesafe";??
  21. ????????????//1,指定加密算法类型??
  22. ????????????MessageDigest?digest?=?MessageDigest.getInstance("MD5");??
  23. ????????????//2,将需要加密的字符串中转换成byte类型的数组,然后进行随机哈希过程??
  24. ????????????byte[]?bs?=?digest.digest(psd.getBytes());??
  25.        //3,循环遍历bs,然后让其生成32位字符串,固定写法??
  26. ????????????//4,拼接字符串过程??
  27. ????????????StringBuffer?stringBuffer?=?new?StringBuffer();??
  28. ????????????for?(byte?b?:?bs)?{??
  29. ????????????????int?i?=?b?&?0xff;??
  30. ????????????????//int类型的i需要转换成16机制字符??
  31. ????????????????String?hexString?=?Integer.toHexString(i);??
  32. ????????????????if?(hexString.length()?2)?{??
  33. ????????????????????hexString?=?"0"?+?hexString;??
  34. ????????????????}??
  35. ????????????????stringBuffer.append(hexString);??
  36. ????????????}??
  37. ????????????//5,打印测试??
  38. ????????????System.out.println(stringBuffer.toString());??
  39. ????????????return?stringBuffer.toString();??
  40. ????????}?catch?(NoSuchAlgorithmException?e)?{??
  41. ????????????e.printStackTrace();??
  42. ????????}??
  43. ????????return?"";??
  44. ????}??
  45. }??

  md5加密:将字符串转换成 32位的字符串(16进制字符(0~f)) 不可逆

  例如:123加密后:202cb962ac59075b964b07152d234b70

  接下来直接调用加密类即可,分别在“设置密码”和“确认密码”两个对话框进行加密比对,具体代码如下:

Java代码
  1. /**?
  2. ?*?确认密码对话框?
  3. ?*/??
  4. private?void?showConfirmPsdDialog()?{??
  5. ????//需要自己去定义对话框的显示样式,所以要调用dialog.setView(view);??
  6. ????Builder?builder?=?new?Builder(this);??
  7. ????final?AlertDialog?dialog?=?builder.create();??
  8. ????final?View?view?=?inflate(this,?R.layout.dialog_confirm_psd,?null);??
  9. ????//让对话框显示一个自己定义的对话框界面效果??
  10. ????dialog.setView(view);??
  11. ????dialog.show();??
  12. ??
  13. ????Button?bt_submit?=?(Button)?view.findViewById(R.id.bt_submit);??
  14. ????Button?bt_cancel?=?(Button)?view.findViewById(R.id.bt_cancel);??
  15. ??
  16. ????bt_submit.setOnClickListener(new?OnClickListener()?{??
  17. ????????@Override??
  18. ????????public?void?onClick(View?v)?{??
  19. ????????????EditText?et_confirm_psd?=?(EditText)?view.findViewById(R.id.et_confirm_psd);??
  20. ????????????String?confirmPsd?=?et_confirm_psd.getText().toString();??
  21. ??
  22. ????????????if?(!TextUtils.isEmpty(confirmPsd))?{??
  23. ????????????????//将存储在sp中32位的密码,获取出来,然后将输入的密码同样进行md5,然后与sp中存储密码比对??
  24. ????????????????String?psd?=?SpUtil.getString(getApplicationContext(),?ConstantValue.MOBILE_SAFE_PSD,?"");??
  25. ??
  26. ????????????????if?(psd.equals(Md5Util.encoder(confirmPsd)))?{??
  27. ????????????????????//进入用户手机防盗模块,开启一个新的activity??
  28. ????????????????????Intent?intent?=?new?Intent(getApplicationContext(),?testActivity.class);??
  29. ????????????????????startActivity(intent);??
  30. ????????????????????//跳转到新的界面以后需要去隐藏对话框??
  31. ????????????????????dialog.dismiss();??
  32. ????????????????}?else?{??
  33. ????????????????????ToastUtil.show(getApplicationContext(),?"输入密码错误");??
  34. ????????????????}??
  35. ??
  36. ????????????}?else?{??
  37. ????????????????//提示用户密码输入为空的情况??
  38. ????????????????ToastUtil.show(getApplicationContext(),?"请输入密码");??
  39. ????????????}??
  40. ????????}??
  41. ????});??
  42. ????bt_cancel.setOnClickListener(new?OnClickListener()?{??
  43. ????????@Override??
  44. ????????public?void?onClick(View?view)?{??
  45. ????????????dialog.dismiss();??
  46. ????????}??
  47. ????});??
  48. }??
  49. ??
  50. /**?
  51. ?*?设置密码对话框?
  52. ?*/??
  53. private?void?showSetPsdDialog()?{??
  54. ????//需要自己去定义对话框的显示样式,所以要调用dialog.setView(view);??
  55. ????Builder?builder?=?new?Builder(this);??
  56. ????final?AlertDialog?dialog?=?builder.create();??
  57. ????final?View?view?=?inflate(this,?R.layout.dialog_set_psd,?null);??
  58. ????//让对话框显示一个自己定义的对话框界面效果??
  59. ????dialog.setView(view);??
  60. ????dialog.show();??
  61. ??
  62. ????Button?bt_submit?=?(Button)?view.findViewById(R.id.bt_submit);??
  63. ????Button?bt_cancel?=?(Button)?view.findViewById(R.id.bt_cancel);??
  64. ??
  65. ????bt_submit.setOnClickListener(new?OnClickListener()?{??
  66. ????????@Override??
  67. ????????public?void?onClick(View?v)?{??
  68. ????????????EditText?et_set_psd?=?(EditText)?view.findViewById(R.id.et_set_psd);??
  69. ????????????EditText?et_confirm_psd?=?(EditText)?view.findViewById(R.id.et_confirm_psd);??
  70. ????????????String?psd?=?et_set_psd.getText().toString();??
  71. ????????????String?confirmPsd?=?et_confirm_psd.getText().toString();??
  72. ????????????if?(!TextUtils.isEmpty(psd)?&&?!TextUtils.isEmpty(confirmPsd))?{??
  73. ????????????????//进入用户手机防盗模块??
  74. ????????????????if?(psd.equals(confirmPsd))?{??
  75. ????????????????????Intent?intent?=?new?Intent(getApplicationContext(),?testActivity.class);??
  76. ????????????????????startActivity(intent);??
  77. ????????????????????//跳转到新的界面以后需要去隐藏对话框??
  78. ????????????????????dialog.dismiss();??
  79. ????????????????????SpUtil.putString(getApplicationContext(),?ConstantValue.MOBILE_SAFE_PSD,?Md5Util.encoder(psd));??
  80. ??
  81. ????????????????}?else?{??
  82. ????????????????????ToastUtil.show(getApplicationContext(),?"密码不一致");??
  83. ????????????????}??
  84. ??
  85. ????????????}?else?{??
  86. ????????????????//提示用户密码输入为空的情况??
  87. ????????????????ToastUtil.show(getApplicationContext(),?"请输入密码");??
  88. ????????????}??
  89. ????????}??
  90. ????});??
  91. ????bt_cancel.setOnClickListener(new?OnClickListener()?{??
  92. ????????@Override??
  93. ????????public?void?onClick(View?view)?{??
  94. ????????????dialog.dismiss();??
  95. ????????}??
  96. ????});??
  97. }
本文发布:Android开发网
本文地址:http://www.jizhuomi.com/android/example/717.html
2017年10月24日
发布:鸡皇冠现金官网hg6388|首页 分类:Android开发实例 浏览: 评论:2