Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android应用程序中为金融交易生成最多10个字符的唯一参考ID?_Java_Android_Database_Key_Uuid - Fatal编程技术网

Java 如何在Android应用程序中为金融交易生成最多10个字符的唯一参考ID?

Java 如何在Android应用程序中为金融交易生成最多10个字符的唯一参考ID?,java,android,database,key,uuid,Java,Android,Database,Key,Uuid,我想为Android应用程序的特定用户在特定时间完成的事务创建一个唯一密钥。我读过两种方法: 将当前时间戳与用户id或用户设备id连接 使用Java的UUID类为每个事务生成唯一的字符串 我对这些方法的结果字符串有几点担心: 第一种方法的结果可能太明显,用户无法猜测和访问其他人的事务 这两种方法的结果似乎太长,无法与用户通信 有人知道更好的方法吗?你可以用。易于计算,代码空间约为2^40。如果您连接到ISBNs,则可以达到2^80以上的代码空间。在应用程序和服务器(机器与机器对话)之间进行交易时

我想为Android应用程序的特定用户在特定时间完成的事务创建一个唯一密钥。我读过两种方法:

  • 将当前时间戳与用户id或用户设备id连接
  • 使用Java的UUID类为每个事务生成唯一的字符串
  • 我对这些方法的结果字符串有几点担心:

  • 第一种方法的结果可能太明显,用户无法猜测和访问其他人的事务
  • 这两种方法的结果似乎太长,无法与用户通信

  • 有人知道更好的方法吗?

    你可以用。易于计算,代码空间约为2^40。如果您连接到ISBNs,则可以达到2^80以上的代码空间。

    在应用程序和服务器(机器与机器对话)之间进行交易时,使用您建议的作为交易标识符。29个字符对于一个事务密钥来说并不算多,特别是对于智能手机现在拥有的那种连接

    我会对这些值加盐,只是为了增加一点混淆。

    之后,对于需要从/发送给人类的事务ID,您将需要更小的(更容易容忍和人类可读)。我会使用更小的ID(可能会发生冲突),但只能让它们在一定时间内工作

    更多信息请参见我的评论


    希望我能帮忙

    为什么它们太长了?你的最大尺码是多少?我会简单地在ASCII表上随机排列,使用时间戳和用户ID连接来为结果播种。嗨,Robin,用户密钥是一个16位长的数字,时间戳再加上13位。保存(在服务器上)和通信(给用户)如此长的事务参考号将是一件痛苦的事,对吗?不完全是,我们谈论的是几个字节。在任何情况下,如果你想缩短它,你可以使用任何你想要的规则。例如,您可以使用时间戳的最后5位数字和用户标识上每两位数字中的一位。此外,您可以按照指定的方式创建密钥,然后对其进行salt和hash(或任何确定性的操作),使其更小。我可以从时间戳中删除毫秒,但如果我使用其他数字,是否会导致冲突?我不太熟悉散列,但是通过散列减少密钥长度是否也会留下密钥冲突的机会?因为无论使用何种格式,密钥越长,冲突的可能性越小。因此,缩短密钥时,会增加碰撞的机会。我不打算讨论这背后的数学问题,但总的来说,如果你想把熵水平降低,你应该尽可能使用最大的键。我宁愿发送一个碰撞几率很小的大钥匙,也不愿发送一个碰撞几率很大的小钥匙。你能澄清一下ISBN13在我的情况下是如何工作的吗?谢谢非常感谢你,罗宾!对于面向用户的id,如果只使用一个简单的id为给定用户唯一地标识一个事务,而不是全局唯一的事务,那会怎么样?实际上,我认为您会失去这方面的安全性。生成一个新的TransactionId(long),然后对其大小或可读性进行散列,怎么样?然后,您可以确保它只在一段时间内有效,以恢复该安全性(您通过散列丢失了该安全性)。这都是非常近似的,取决于很多因素。