2

私の会社が作成して販売している商用ソフトウェアは、現在、Base-64 でエンコードされた RSA 暗号化ライセンス キーを使用しています。結果の長さは約 90 文字です。かさばり、使いにくく、ユーザー エラーが発生しやすくなります。一部のユーザーは、コピー アンド ペーストをよく理解せず、手動でキーを入力しようとします。

現在のアルゴリズムを、他のプログラムで使用されている 30 文字のキーなど、より小さなキーを作成するアプローチに置き換えたいと考えています。さらに、多くのソフトウェア ベンダーが、数字と大文字のみを使用するキーを使用していることに気付きました。

ユーザー名、製品 ID、およびバージョン番号を埋め込んだ合理的に安全なキーを生成するために使用できるアルゴリズムは何ですか? 結果のライセンス キーは 30 文字以内で、数字と大文字のみを使用しますか?

(重要な場合は、Java でコーディングしています。)

だから...ここから始めましょう:

public String createLicenseKey(String customerName, String productId, String versionNumber) {
    // what goes here?
    return licenseKey;
}

String key = createLicenseKey("Max Headroom", "ABCD", "4");
// key should now be in format AAAAAA-AAAAAA-AAAAAA-AAAAAA-AAAAAA
4

2 に答える 2

3

fcm's answer に記載されているリンクをたどったところ、可能性がわかりました。Java クラスパスに Google の Guava ライブラリが必要です。

import com.google.common.hash.HashCode;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;

public class ScratchSpace {

    public static void main(String[] args) {
        String userName = "Max Headroom";
        String productKey = "ABCD";
        String versionNumber = "4";

        final String licenseKey = createLicenseKey(userName, productKey, versionNumber);
        System.out.println("licenseKey = " + licenseKey);

    }

    public static String createLicenseKey(String userName, String productKey, String versionNumber) {
        final String s = userName + "|" + productKey + "|" + versionNumber;
        final HashFunction hashFunction = Hashing.sha1();
        final HashCode hashCode = hashFunction.hashString(s);
        final String upper = hashCode.toString().toUpperCase();
        return group(upper);
    }

    private static String group(String s) {
        String result = "";
        for (int i=0; i < s.length(); i++) {
            if (i%6==0 && i > 0) {
                result += '-';
            }
            result += s.charAt(i);
        }
        return result;
    }

}
于 2013-03-26T13:14:44.790 に答える
1

非常に具体的なものについては、ソフトウェアだけが「理解」できる方法で必要な情報をハッシュに含める独自のアルゴリズムを生成する必要があるでしょう。

情報 (ユーザー名、ID、バージョン) を取得し、秘密のソルトを追加して、セキュリティのレイヤーを追加します。

これまでのコードについては正しい考えを持っていますが、特定のキーに関してはまだ決まっていません。

この件に関する詳細については、thisthisなどの同様の質問を参照してください。

于 2013-03-26T12:57:21.293 に答える