问题描述
求C#代码的datetime.now值加密成6位,可逆反解
解决方案
解决方案二:
没任何要求,那我年月日换算成二个长度?然后时分秒毫秒换算成4个长度?
解决方案三:
datetime.now要包括什么内容?年月日?还是要再包括时分秒?还是要再包括毫秒?加密要多复杂?一个很简单的方式,只到秒的:用datetime.now去减2000/01/0100:00:00,算出秒数,再转换成36进制,基本上能保证在6位之内(最大日期是2068-01-19)。得到的字符串,可以再次加密。
解决方案四:
任何对称加密过程都只会让长度变长,不可能达到你这样的要求不过可以换个想法实现byte[]byte[0]=20byte[1]=16byte[2]=03byte[3]=21byte[4]=12byte[5]=26转换成字符串。需要用的时候再转换成byte取出即可
解决方案五:
加密不可能缩短数据长度
解决方案六:
datetime.now.tostring("yyMMddHHmmss")得到:160321010000每两位分隔一个数组:string[]strs{"0","1","2"...."9","a","b","c"...."z","A","B","C"...."Z"}年份范围:0-99,intindex=int.Parse("16")-16;加密:stringY=strs[index];解密:varyy=strs.ToList().IndexOf(Y)+16;月份,日期,小时,分钟,秒同样都能得到1个的加密字符,只不过不要加减16.这是比较简单的替换字符,安全性不高,很容易试出来.
解决方案七:
可以使用周秒方式进行时间拆解设定某一天某一时刻为起始时间当前时间等于起始时间加7乘周数加毫秒周用ushort类型毫秒使用uint类型
解决方案八:
引用6楼码农9078的回复:
可以使用周秒方式进行时间拆解设定某一天某一时刻为起始时间当前时间等于起始时间加7乘周数加毫秒周用ushort类型毫秒使用uint类型
加密的话需要自己进行目前算法会超过6字节