
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
原理的には同じことですが、チェックデジットの桁が少ないとまぐれ当たりに可能性が高くなります。
また、スクランブルの方法としてEXORを使ったものは、比較的推測しにくいものです。サンプルとして16進4桁のシリアルを発行したり、試験するプログラムを書きました。
#include <stdio.h>
#include <stdlib.h>
#define CRYPT 0xdeadface
int serialchk(int32_t serial)
{
int16_t upper, lower;
serial ^= CRYPT;
upper = serial >> 16;
lower = serial & 0xffff;
return(upper == lower);
}
int32_t mkserial(int16_t lower)
{
int32_t serial;
serial = lower << 16 | lower;
serial ^= CRYPT;
return (serial);
}
char *prog;
void
usage(void)
{
fprintf(stderr, "%s m|t strings\n",prog);
fprintf(stderr, "\tm: make key\n");
fprintf(stderr, "\tt: test key\n");
fprintf(stderr, "\tstrings: hex-dec number\n");
exit(1);
}
int main(int argc, char *argv[])
{
int serial;
prog = argv[0];
if (argc < 3) {
usage();
}
sscanf(argv[2], "%x", &serial);
switch(argv[1][0]) {
case 'm':
serial = mkserial(serial & 0xffff);
printf("%08x\n", serial);
break;
case 't':
printf("%s\n", serialchk(serial) ? "OK":"NG");
break;
default:
usage();
}
return 0;
}
No.2
- 回答日時:
シリアルでしたか
そうですね。簡単なものでよければですが。。。
今回は数字だけを使うものとします。(文字列でも考え方は同じようなものです。
まずはじめに適当な数字を決めます。
通し番号でも良いし日付を使うのも良いです。
今回は日付を使いましょう。
2005年12月11日18時46分(現在時刻)
これを「200512111846」という数字にします。
次にこれらの数字一つ一つに適当な数字をかけていきます。
2 0 0 5 1 2 1 1 1 8 4 6
* * * * * * * * * * * *
5 7 1 4 9 7 0 2 0 4 6 2
こんな感じです。これらを計算していくと
10,0,0,20,9,14,0,2,0,32,24,12となります。(たぶん)
これらの数字を足していきます。
すると123となります。(きれいに並んでますねw
これを9で割ってあまりを出します。
6になります。(たぶん)
そしたら最初に作った数字「200512111846」の後ろでも前でも好きなところに入れます。今回は前に入れることにしましょう。
「6200512111846」
これがシリアルキーとなります
この6はチェックサムといいシリアルキーがあっているか否かを調べるのに使います。
つまりプログラム側で「200512111846」を元にチェックサムを作って入力されたものと同じならばそれは正しいと判断します。
しかし違えばそれは偽者だということです。
文字列を使う場合はそれぞれの文字を数字に変換すればいいのです。
aなら1Bなら2というかんじで
最初にチェックサムは何文字目に入れるのか(通常は一番最初か最後)
各数字に書ける数
これらを決めておけば結構簡単にできるのではないかと思います。
No.1
- 回答日時:
機能制限はその機能を使おうとしたときに登録が済んでいるかどうか確認して、していなければ止めるなりすれば良いです。
フォームってどっちのフォームですか?Web?それともプログラム?
プログラムならテキストボックスを一つ入れれば良いでしょう。
Webでも同じなわけですが必要事項を書き込むテキストボックスをつければ良いだけです。
個人的にはメールのほうがらくだと思いますがね
それとも仕組み(シリアルキーなど)についての質問ですか?
質問の仕方からしてこのようなことだと思ったのですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel VBAについてです。 少しだけ知識はあるのですが、 うまくいかなかったので 質問させてい 3 2022/09/13 18:40
- 画像編集・動画編集・音楽編集 立体的なロゴ や Microsoft製ソフトウェア のロゴ自力でどこまで作れますか? 3 2022/08/13 18:12
- 知的財産権 例のコンテンツを商標登録した人について 1 2022/05/15 20:30
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
- ネットワーク 通信量を見たい 3 2023/03/01 07:47
- 物理学 永久磁石MRI5台、超伝導磁石3台 磁石以外のハードウェアやソフトウェアをすべて自前で開発 とある大 4 2023/06/12 00:47
- 仕事術・業務効率化 使用中のソフトで、インボイス制度に対応する為の作業料が30万以上。普通? 4 2023/06/15 21:26
- docomo(ドコモ) SH-02H Android 5.1.1をバージョンアップしようとすると、エラーになる。 2 2022/10/10 12:53
- PDF こんなPDF作れますか? 6 2022/05/13 11:14
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual C++ フレームを中央に表...
-
C++ bmp 透過処理
-
C言語プログラミング 漸化式に...
-
ヒストグラム均等化処理プログラム
-
C言語の関数について。
-
16bitで乱数を生成する方法
-
nCrの計算
-
並列処理プログラム
-
カレンダークラス
-
シェアウェアの作り方
-
C言語でDOS画面のプログラム(...
-
returnの使い方
-
DXライブラリによるパズルゲー...
-
偶数パリティ
-
whileとifを使い偶数を出すには
-
Pythonで入力した値以外の最大...
-
C言語で簡単なパックマンゲーム...
-
direct3dで当たり判定
-
再起呼び出しの回数をカウント...
-
| (or) を使った関数の引数の作...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
条件が多い場合
-
再起呼び出しの回数をカウント...
-
argvのNULLチェック
-
C言語でDOS画面のプログラム(...
-
カードシャッフルのブログラム...
-
c++ TCHARで文字化け
-
複数の共有メモリの作成
-
C++ Debug Errorについて教えて
-
C++ bmp 透過処理
-
関数とビット列
-
OpenCVによる4値化について
-
コマンドプロンプトのウィンド...
-
ヌメロンのプログラム
-
for 分についてです
-
DXライブラリとC言語 fwrite関...
-
16bitで乱数を生成する方法
-
プログラミングに関して
-
C++で表を作成したいのです ...
おすすめ情報