C 唯一密钥生成算法

C 唯一密钥生成算法,c,C,我需要使用ipv4和ipv6地址生成唯一值,即如果我输入192.37.4.60;应该生成一个唯一的密钥,当我输入192.60.4.37时,应该生成另一个密钥。我如何做到这一点任何人都可以帮助我,我还可以输入ipv6地址,以及如何为每个输入生成唯一的值。任何人可以提出任何算法或任何现有算法输出输入IP地址:瞧,满足要求 (如果我的解决方案不适用于您,这意味着您需要为您的问题添加更多细节)IP非常独特:)尤其是IPv6地址。 此外,您可以始终使用哈希算法(例如MD5、SHA1等)来创建“密钥”。只要

我需要使用ipv4和ipv6地址生成唯一值,即如果我输入192.37.4.60;应该生成一个唯一的密钥,当我输入192.60.4.37时,应该生成另一个密钥。我如何做到这一点任何人都可以帮助我,我还可以输入ipv6地址,以及如何为每个输入生成唯一的值。任何人可以提出任何算法或任何现有算法

输出输入IP地址:瞧,满足要求


(如果我的解决方案不适用于您,这意味着您需要为您的问题添加更多细节)

IP非常独特:)尤其是IPv6地址。
此外,您可以始终使用哈希算法(例如MD5、SHA1等)来创建“密钥”。只要输入数据也是唯一的,它就会是唯一的:)

根据问题的需要,有几种可能的解决方案

  • 您可以使用IP地址本身,但请记住,IP地址可以被欺骗
  • 如果您打算在多个对等方之间使用此密钥以保护通信通道,那么您可能需要查看or算法
  • 如果只想将它们用于某些静态数据,则可以使用以下任一项:、和*

  • 您可能希望为您的算法使用多个源。考虑使用与MAC地址相结合的任何其他与材料相关的信息,您可以从机器/客户机上获得应用程序将运行的

    将IP转换为其数值(十进制)表示:

    10.0.0.1->00001000000000000000000000000001->167772161


    这就是许多IP地址在内部存储的方式。它很好,因为它只需要32位的存储空间。您也可以对IPv6执行此操作,但它需要比uint32更大的东西。

    一个可能的解决方案是使用左移位运算符并添加。例如,如果a、b、c和d表示八位字节,那么下面的代码将为您提供一个唯一的值

    int a=1;
    int b=2;
    int c=3;
    int d=4;
    
    int value =(a<<24)+(b<<16)+(c<<8)+d;
    
    inta=1;
    int b=2;
    int c=3;
    int d=4;
    
    整数值=(a除了您的密钥应该是唯一的之外,您不需要声明密钥的任何必需属性,因此显而易见的解决方案是使用规范化的IP地址作为密钥。您可以用显而易见的方式将地址转换为数字,但请注意,IPv6地址会产生巨大的数字,因此无论您使用何种语言,您都需要BigInt实现



    (如果你不是说所有340个不确定的地址都应该有唯一的键,那么你当然应该看看普通的散列函数。)

    另一种选择是直接使用。

    为什么不使用IP地址本身作为密钥?密钥将如何使用。因为它可能会影响算法的选择。如果我输入ipv6地址,我会这样做,因为它将超出范围,我不想要这么大的数字also@hopeless编码员:如果你想要一个唯一的密钥如果是IPv6地址,那么您必须容忍密钥是128位的数字,因为这只是有多少个唯一的IPv6地址。或者,您可以简单地创建一个IP地址的密钥表,在看到新的IP地址时按顺序分配密钥。@无望的编码者:您甚至没有在问题中指定所需的数字。如果你不解释你想要实现什么,这是不可能的。我尝试了MD5算法,但o/p是128位,我做了一些类似的事情[root@INFBA01415~]#vi simple.txt[root@INFBA01415 ~]#md5sum simple.txt d41d8cd98f00b204e9800998ecf8427e simple.txt当我试图打印此数据时,它发出了一个错误。我将上面的六进制值转换为十进制。等效的ant试图打印#include int main(){long int x=15284527576400310788;printf(“%ld\n”,x);返回0;}但我得到了一个错误测试。c:4:14:警告:整数常量太大,以至于它是无符号测试。c:在函数“main”中:测试。c:4:警告:此十进制常量仅在ISO C90测试中是无符号的。c:4:警告:整数常量太大,不能“long”类型测试.c:4:警告:隐式常量中溢出conversion@hopless编码器:也许你想看看这个:我试过MD5算法,但o/p是128位,我做了一些类似的事情[root@INFBA01415~]#vi simple.txt[root@INFBA01415 ~]#md5sum simple.txt d41d8cd98f00b204e9800998ecf8427e simple.txt当我试图打印此数据时,它给出了一个error@static_rtti:很高兴您添加了该免责声明。@BasicWolf:不管怎样,使用128到160位宽的加密哈希(分别适用于MD5和SHA1)对32位IPv4地址进行哈希运算是一种过火的做法,而对128位IPv6地址进行哈希运算则不太明智。唯一性的程度(与仅使用这些地址相比)可能几乎没有明显的提高对于一个相当大的处理代价。发明你自己的加密算法通常不是一个好主意。@Francis:虚线十进制IPv4地址就是这样表示的,Raza没有这样做。这是存储地址“1.2.3.4”32位。但是有一个小错误,因为他使用的是有符号整数。而且a、b、c和d可能会大于255,这会导致问题。我不是说这不是它的表示方式,我是说退出加密算法不是一个好主意(但现在我看到这只是表示,而不是加密算法)在飞行中。仅仅因为有点旋转并不意味着它是加密的。@Chris谢谢你指出这一点…这表明你对加密很了解。当我有ipv6时该怎么办address@hopeless:请参阅。同样的逻辑也适用,但由于IPv6可能会丢失数字(前导零可以删除),这稍微有点困难,所以您需要对此进行说明。一旦您将IPv6地址转换为b