V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mmmbka
V2EX  ›  程序员

大佬求救, String 类型字符串 160 位 ,怎么转换为 long 类型 19 位--- Java 算法

  •  
  •   mmmbka · 2019-04-24 11:32:50 +08:00 · 3176 次点击
    这是一个创建于 2029 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rt,如题 aes 加密 json,现在要把加密后的结果 变成 19 位数,去生成邀请码,然后可以根据邀请码逆向出 string,然后可以去 aes 解密。 生成在邀请码的算法需要 long 类型。

    待加密数据:{"userId":"6414401168721254401","groupId":"6406523439465797633"}

    加密 json:7275656960A45B1FC7E6B8B366F56CAC2C18C7DEED5207D935C3988FD1A79DEBC76A6143BC0C9A31112C9E85785E2634F123B0C84CBD51099EDC34312876DE27C254E4CC65AE7F2DEEE1CAAED04CD374

    解密:{"userId":"6414403168721254401","groupId":"6406533439465797633"}

    7 条回复    2019-04-24 20:32:23 +08:00
    tangtj
        1
    tangtj  
       2019-04-24 11:47:14 +08:00
    随机一个 long,存数据库。
    cxtrinityy
        2
    cxtrinityy  
       2019-04-24 12:28:53 +08:00 via Android
    要把非定长字符串(你的密文)转成定长数字怕是转不回去吧,参考 MD5,把密文转成二进制按 64 个 bit 一组连续性进行与操作最后可以得到一个 long
    想逆向,参照楼上说法做个映射怎么样
    LimeVista
        3
    LimeVista  
       2019-04-24 12:53:59 +08:00 via Android
    以小换大?可逆,无视信息熵?不太科学吧,要不然就跟楼上说的数据库表映射,那样的话加密就没意义了。表设计的合理点就行吧。
    feiyuanqiu
        4
    feiyuanqiu  
       2019-04-24 13:00:47 +08:00 via Android
    你这个方案有点像 jwt 啊
    night98
        5
    night98  
       2019-04-24 13:04:21 +08:00
    逆向不了,数据库映射就行了。怕性能差就放缓存里
    samcode
        6
    samcode  
       2019-04-24 14:21:24 +08:00
    如果 Json 只有 userid 和 groupid 就好办
    userId<<64|groupId 然后再加密这个 128 位数
    fishioon
        7
    fishioon  
       2019-04-24 20:32:23 +08:00 via iPhone
    放缓存,邀请码再加个时效性
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 01:37 · PVG 09:37 · LAX 17:37 · JFK 20:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.