PHP许可证密钥生成器

时间:2011-06-27 18:01:42

标签: php actionscript-3 license-key

我正在寻找一种通过PHP脚本生成许可证密钥然后将其传输到我的应用程序(Air,AS3)的方法,并在此应用程序中正确读取数据。例如,这是代码:

<?php
  error_reporting(E_ALL);
  function KeyGen(){
     $key = md5(mktime());
     $new_key = '';
     for($i=1; $i <= 25; $i ++ ){
               $new_key .= $key[$i];
               if ( $i%5==0 && $i != 25) $new_key.='-';
     }
  return strtoupper($new_key);
  }
  echo KeyGen();
?>

生成密钥如下:1AS7-09BD-96A1-CC8D-F106。 我想将一些信息添加到密钥 - 电子邮件用户,然后将其传递给客户端(Air app),解密数据并在应用程序中进行显示。

有可能吗?

3 个答案:

答案 0 :(得分:3)

好的,让我们分解你的要求:

你想要:

  1. 在键中添加一些信息 那么你想添加什么信息?当你这样做时,你想让钥匙更长吗?您是否希望此信息需要密钥才能解密?在vaugest意义上,这很可能与PHP
  2. 电子邮件用户
    PHP具有mail()功能。它几乎是有效的。
  3. 然后将其传递给客户(Air app)
    Air应用程序是否通过http请求调用此php脚本?如果是这样,设置内容类型并输出密钥。
  4. 解密数据 回到第1点,可能,但是你想要一把钥匙,你是否关心格式是否有所改变。另外,您不想解密AS3应用程序中的数据吗?
  5. 在应用中显示。 如果AS3应用程序要显示密钥或解密数据,那么它是AS3,您需要在其中显示数据。

答案 1 :(得分:1)

如果您只想存储一些信息,但使用上面使用的符号集(0-9A-Z)对其进行“编码”,则可以使用下面的算法。

该代码是我的旧Python(3)程序。它当然不是花哨的,也不是很有考验,但我想它总比没有好,因为你还没有得到很多答案。将代码移植到PHP或AS应该很容易。例如,reduce语句可以由命令式样式循环替换。另请注意,//表示Python中的整数除法。

对它进行一些压缩/加密也应该很容易。希望它类似于你想要的。到此为止。

from functools import reduce

class Coder:
    def __init__(self, alphabet=None, groups=4):
        if not alphabet:
            alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        self.alphabet = alphabet
        self.groups = groups

    def encode(self, txt):
        N = len(self.alphabet)
        num = reduce(lambda x,y: (x*256)+y, map(ord, txt))

        # encode to alphabet
        a = []
        while num > 0:
            i = num % N
            a.append(self.alphabet[i])
            num -= i
            num = num//N

        c = "".join(a)
        if self.groups > 0:
            # right zero pad
            while len(c) % self.groups != 0:
                c = c + self.alphabet[0]
            # make groups
            return '-'.join([c[x*self.groups:(x+1)*self.groups]
                             for x in range(len(c)//self.groups)])
        return c

    def decode(self, txt, separator='-'):
        # remove padding zeros and separators
        x = txt.rstrip(self.alphabet[0])
        if separator != None:
            x = x.replace(separator, '')
        N = len(self.alphabet)
        x = [self.alphabet.find(c) for c in x]
        x.reverse()
        num = reduce(lambda x,y: (x*N)+y, x)

        a = []
        while num > 0:
            i = num % 256
            a.append(i)
            num -= i
            num = num//256
        a.reverse()
        return ''.join(map(chr, a))

if __name__ == "__main__":
    k = Coder()
    s = "Hello world!"
    e = k.encode(s)
    print("Encoded:", e)
    d = k.decode(e)
    print("Decoded:", d)

示例输出:

Encoded: D1RD-YU0C-5NVG-5XL8-7620
Decoded: Hello world!

答案 2 :(得分:1)

使用md5你不能这样做,因为这是一个单向哈希。您应该使用解密方法来执行此操作,因为它使用密钥对其进行编码和解码。有几个PHP扩展可以做到这一点,请参阅php手册。您也可以使用第三方软件,例如http://wwww.phplicengine.com

相关问题