qq_28499833
qq_28499833
采纳率100%
2019-01-11 16:31

已知明文 和密文,求解密算法

10
已采纳

卡号(我授权的卡号) 卡号(数据库保存的卡号)
85391 kJ2bkZk=
85392 kJ2bkZo=
85393 kJ2bkZs=
85395 kJ2bkZ0=
85396 kJ2bkZ4=
85398 kJ2bkZA=
85399 kJ2bkZE=
85500 kJ2dmJg=
85501 kJ2dmJk=
85502 kJ2dmJo=
85503 kJ2dmJs=
85505 kJ2dmJ0=
85506 kJ2dmJ4=
85508 kJ2dmJA=
85509 kJ2dmJE=
85525 kJ2dmp0=
85510 kJ2dmZg=
85526 kJ2dmp4=
85511 kJ2dmZk=
85528 kJ2dmpA=
85512 kJ2dmZo=
85529 kJ2dmpE=
85513 kJ2dmZs=
85530 kJ2dm5g=
85515 kJ2dmZ0=
85531 kJ2dm5k=
85516 kJ2dmZ4=
85532 kJ2dm5o=
85533 kJ2dm5s=
85518 kJ2dmZA=
85519 kJ2dmZE=
85535 kJ2dm50=
85520 kJ2dmpg=
85536 kJ2dm54=
85521 kJ2dmpk=
85538 kJ2dm5A=
85522 kJ2dmpo=
85539 kJ2dm5E=
85550 kJ2dnZg=
85523 kJ2dmps=
91063 kZmYnps=
91065 kZmYnp0=
91066 kZmYnp4=
91068 kZmYnpA=
91069 kZmYnpE=
91080 kZmYkJg=
91081 kZmYkJk=
91082 kZmYkJo=
91083 kZmYkJs=
91085 kZmYkJ0=
85551 kJ2dnZk=
85552 kJ2dnZo=
85553 kJ2dnZs=
85555 kJ2dnZ0=
85556 kJ2dnZ4=
85558 kJ2dnZA=
85559 kJ2dnZE=
85560 kJ2dnpg=
这是一个授权会员卡号,我在软件上输入卡号(明文),授权后保存在数据库中(加密),
我用base64解码,如 kJ2bkZk=应该是85391,解码后是:�����(UTF-8)或者是:悵洃?(GBK)

这个能知道是怎么加密的吗?或者把这加密的给读出来。
因为我要从新写软件(c#写),不用之前的软件,但是我要吧数据库中加密的卡号解密出来,不然我从新写软件,之前的会员卡就用不了了(之前的软件商没有联系方式,一些功能没有,才决定自己从新写个软件,数据库继续用他们的数据库)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • qq_33380252 1进击的小白 2年前

    我是找了几个密文进行解码,经过大量测试发现数字和字母的对应关系,我是不是很无聊
    0 h
    1 g
    2 f
    3 e
    5 c
    6 b
    8 p
    9 o
    问我为啥没有4和7是因为给的明文中没有,根据这几个也能找到对应关系了,找到ascII编码
    00110000 01101000
    00110001 01100111
    00110010 01100110
    看完楼上两位说的方法,写完测试下确实没问题,经验多了就是好,一眼就看出来是哪的问题
    我补充下c#写的方法

    //加密方法
    public static string getTransAsc(string password)
            {
                Byte[] byteStr = UTF8Encoding.UTF8.GetBytes(password);
                Byte[] resultArray = new byte[byteStr.Length];
                for (int i = 0; i < byteStr.Length; i++)
                {
                    resultArray[i] = (byte)(byteStr[i] ^ 0xa8);
                }
                return Convert.ToBase64String(resultArray);
            }
    //解密方法
    public static string getDecTransAsc(string password)
            {
                Byte[] byteStr = Convert.FromBase64String(password);
                Byte[] resultArray = new byte[byteStr.Length];
                for (int i = 0; i < byteStr.Length; i++)
                {
                    resultArray[i] = (byte)(byteStr[i] ^ 0xa8);
                }
                return UTF8Encoding.UTF8.GetString(resultArray);
            }
    //调用方法 控制台程序测试的
    static void Main(string[] args)
            {
                                string str2 = Console.ReadLine();
                                string con = getTransAsc(str);
                                Console.WriteLine("加密后的字符串:" + con);
                                string str2 = Console.ReadLine();
                                string con2 = getDecTransAsc(str2);
                                Console.WriteLine("解密后的字符串:" + con2);
                              Console.ReadKey();
                    }
    
    点赞 评论 复制链接分享
  • tangruize trzzzZ 2年前

    caozhy正解. base64解密后, 对每个字节异或 0xa8 即可得到数字的ascii表示, 可直接打印, 我不会C#, 写了一个python3脚本.

    #!/usr/bin/python3
    
    import base64
    import sys
    
    input_b64 = sys.argv[1]
    decoded = base64.b64decode(input_b64)
    for c in decoded:
        print(chr(c ^ 0xa8), end='')
    print()
    
    

    运行:

    python3 decode.py kJ2bkZk=
    

    得到结果 85391

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2年前

    很明显,每个数字在每一位上,原文对应相同的密文。在不同位上不同。
    所以可以查表法解决。
    进一步,符合这种规律的算法,很可能就是简单的XOR加密。

    点赞 1 评论 复制链接分享
  • zhaoyouping zhaoyouping 2年前

    首先,你要知道你密文的加密规则是又哪一种加密方式进行填充的这是规则,你知道规则后才能按照原来的方式进行解密。
    参考下rsa,aes 两种加密解密方式

    点赞 评论 复制链接分享

相关推荐