• java通过特定4个字符或者特定16个字符加密成特定字符组成的字符串及解密


    1. public class test8 {
    2. public final static String[] _t4EnStrs= {"00","01","10","11"};
    3. public final static String[] _t8EnStrs= {"0000","0001","0010","0011","0100",
    4. "0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};
    5. public static String binaryToString(String binaryStr) {
    6. StringBuilder result = new StringBuilder();
    7. String[] split = binaryStr.split("(?<=\\G.{8})");
    8. for (String str : split) {
    9. int charCode = Integer.parseInt(str, 2);
    10. result.append((char) charCode);
    11. }
    12. return result.toString();
    13. }
    14. public static int searchIndex(String[] Strs,String s) {
    15. for(int i=0;i
    16. if(Strs[i].equals(s)) {
    17. return i;
    18. }
    19. }
    20. return -1;
    21. }
    22. public static String stringToBinary(String str) {
    23. StringBuilder result= new StringBuilder();
    24. char[] chars = str.toCharArray();
    25. for (char ch : chars) {
    26. result.append(String.format("%8s", Integer.toBinaryString(ch)).replaceAll(" ", "0"));
    27. }
    28. return result.toString();
    29. }
    30. public static String sumCodeStr(String _enterStr,int keyNum,String key) {
    31. String _rStr="";
    32. int kn=(keyNum==4)?2:4;
    33. int _subNum=0;
    34. char[] keyChars=key.toCharArray();
    35. String[] enstrs=(keyNum==4)?_t4EnStrs:_t8EnStrs;
    36. for(int i=0;i<_enterStr.length()/kn;i++) {
    37. String _subStr=_enterStr.substring(_subNum, (_subNum+kn));
    38. int _strindex=searchIndex(enstrs, _subStr);
    39. _rStr=_rStr+keyChars[_strindex];
    40. _subNum=(i+1)*kn;
    41. }
    42. return _rStr;
    43. }
    44. public static String encode(String enStr,String key) {
    45. String reEncodeStr="";
    46. String encodeStr="";
    47. int kNum=key.length();
    48. encodeStr=stringToBinary(enStr);
    49. reEncodeStr=sumCodeStr(encodeStr, kNum, key);
    50. if(kNum!=4&&kNum!=16) {
    51. return null;
    52. }
    53. return reEncodeStr;
    54. }
    55. public static String decode(String deStr,String key) {
    56. String reDecodeStr="";
    57. String decodeStr="";
    58. int kNum=key.length();
    59. if(kNum!=4&&kNum!=16) {
    60. return null;
    61. }
    62. String[] destrs=(kNum==4)?_t4EnStrs:_t8EnStrs;
    63. char[] deStrChars=deStr.toCharArray();
    64. for(char enC:deStrChars) {
    65. int keyIndex=key.indexOf(String.valueOf(enC));
    66. decodeStr=decodeStr+destrs[keyIndex];
    67. }
    68. reDecodeStr=binaryToString(decodeStr);
    69. return reDecodeStr;
    70. }
    71. public static void main(String[] args) {
    72. String s1="1234";
    73. String key="1234";
    74. String ss=encode(s1, key);
    75. System.out.println("加密:"+ss);
    76. System.out.println("解密:"+decode(ss, key));
    77. }
    78. }

     运行结果:

  • 相关阅读:
    MYSQL练习题
    学会“创建者模式”再去找她玩(原型)
    韩国突发:将批准比特币ETF
    基于静电放电算法优化概率神经网络PNN的分类预测 - 附代码
    sql注入(6), 更新注入, 堆叠注入, 宽字节注入
    0基础学习VR全景平台篇 第101篇:企业版功能-子账号分配管理
    陪诊系统|陪诊软件革新陪诊体验解决病患难题
    201912-3 CCF 化学方程式 (满分题解)
    死磕面试系列,Java到底是值传递还是引用传递?
    WPF ContentControl
  • 原文地址:https://blog.csdn.net/qq_39456630/article/details/132618731