【问题标题】:Java Dates: Long to Date Striping off TimeJava 日期:长到日期剥离时间
【发布时间】:2012-12-12 12:56:35
【问题描述】:

我有一个要根据日期加密和解密的文件。编写时,我想使用当前日期,而不是时间。我会用什么来做这个?

然后,每当我想解密它时,我都可以使用 File.lastModified 来获取长日期。从这里开始,如何将其仅转换为写入日期(而不是时间)(或上次修改,应该相同)?

我宁愿避免使用额外的库,如果它过于复杂,那很好,因为我正在加密数据,而复杂的代码将有助于摆脱窥探者。最重要的是,它需要能够以相同的方式跨所有语言环境和平台读取日期,以免丢失加密。

编辑:URL 问题已解决。 Java 想要 / 在 .net 和 ?如下:

"http://login.minecraft.net/?user=" + username + "&password=" + password + "&version=99"

现在我的加密课因为某事而崩溃了……

【问题讨论】:

  • 目前不多,我有点纠结于如何从 Java 的日期缩短时间。现在,读者正在使用原始 long 进行解密,但其中有时间,而且我知道在我的代码获取日期和文件实际创建(修改)时间之间很可能存在毫秒差异.这就是为什么我只想要日期。
  • 忽略了使用最后修改日期作为密钥来加密文件是没有意义的(任何想要访问数据的人都知道密钥并且丢失了,只要你复制文件),为什么您认为使用日期而不是日期+时间可以解决您的问题,即加密发生在实际文件修改之前的某个时间?如果文件在午夜之前被加密并且直到午夜之后才被修改怎么办?
  • 首先,我的程序的用户不会知道密钥是什么,而且如果他们需要我的程序,他们很可能不会有任何加密知识,而且它是比硬编码密钥更安全。其次,您认为有人希望在晚上 11:59:59 准确保存他们的数据的频率是多少?机会是指数级的!我是否应该只在键中包含年份和月份来使产生这种效果的难度增加 31 倍?

标签: java date encryption time long-integer


【解决方案1】:

简单的建议:首先将日期转换为 yyyy-mm-dd 字符串。其次,将字符串与创建密钥所需的任何其他相关数据一起散列。请参阅Convert timestamp long to normal date format 了解长/日期到字符串的转换。

【讨论】:

  • 好的,我目前正在使用 Date 的 depreciated 方法来获取 mm-dd-yyyy 形式的字符串。我会看看这是否有效。
  • 问题解决了!我所要做的就是首先弄清楚如何加密,因为它与 C# .NET 有很大的不同......无论如何,你的想法确实有帮助。用户数据现在可以使用文件的日期成功加密和解密。
【解决方案2】:
GregorianCalendar c = new GregorianCalendar(time);
c.set(GregorianCalendar.HOUR, 0);
c.set(GregorianCalendar.HOUR_OF_DAY, 0);
c.set(GregorianCalendar.MINUTE, 0);
c.set(GregorianCalendar.SECOND, 0);
c.set(GregorianCalendar.MILLISECOND, 0);
c.getTimeInMillis();

【讨论】:

  • 好主意,包括时间,但总是在相同的小时、分钟、秒等。
  • 由于对日期方法折旧的大量警告,我将改为将此答案与已接受的答案结合使用。我会投票,但我的名声太小了。
【解决方案3】:

长时间值定义为:

A milliseconds value represents the number of milliseconds that have passed since January 1, 1970 00:00:00.000 GMT. 

所以要向下舍入到最近的一天,您需要以下内容:

public static final long OneDay = 1000l * 60l * 60l * 24l;

long today = (System.currentTimeMillis() / OneDay) * OneDay;
Date lastMidnight = new Date(today);

但请不要忘记潜在的时区问题。

【讨论】:

  • 一天并不总是1000l * 60l * 60l * 24l ms。
  • 此外,还有更有效的方法可以做到这一点。我知道我说过复杂的代码是可以的,但前提是它是必要的。
  • @Nifty255 - 我除以long,然后乘以long。您需要多高的效率?其他选项包括使用 Calendar 对象和日期格式化程序。
  • 这是获取 dd-mm-yyyy 格式的问题。如果它需要一个 Date 对象,当然,但如果我使用它,我肯定需要注释所有步骤,这样我以后不会迷失自己,并且注释一段处理加密的代码有点需要在我看来远离安全。
  • @Nifty255 在代码中添加注释会影响加密...什么???这是我听过的最愚蠢的事情之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
  • 2011-03-01
相关资源
最近更新 更多