2009-07-12 1 views
1

私は自分のウェブサイトにライセンスキージェネレータを実装しようとしていますが、私はPHPの知識はほとんどありません! 私の(Cocoa)アプリケーションでは、RSA_sign関数(C#)を使用するシステム検証を統合しました...私はpaypal IPN通知システムを使用して自動的に生成し、ユーザーにライセンスキーを送信したいと思います...私は実際には、RSAキーを使用してPHPで文字列に署名する方法を知りません! PHPで私はopenss_sign関数だけを知っていますが、それは同じことではありません! または、DSA署名方式を使用する方が良いと簡単ですか?PHPでRSA_signまたはDSA_sign!

お願いします。

すべての返信をお寄せいただきありがとうございます。

答えて

0

あなたはopenssl_sign()が必要です。

EDIT:

  • は、メッセージダイジェストはあなたが確認するために使用するものであることを確認してください。
  • base64の出力を別の署名と比較してテストしないで、C#コードの署名を検証してテストします。同じデータの同じキーを持つ2つの有効なシグネチャが異なるバイナリ表現を持つことは可能です。
+0

しかし、C#でRSA_signを使用して以前と同じ文字列に署名しようとしましたが、次にPHPでopenss_signを使用しました。 ...そしてベース64の表現は違う!あなたが私のコードを投稿したい場合は! –

+0

SHA1の16進数をより客観的に掲載しました。間違いがありますか? –

0

ありがとうございます!あなたが正しいです!

問題が見つかりました。私がopenssl_signで使用しているハッシュ文字列にあります。 私はObjective-Cでこのコードをしました:

NSString *stringToEncript = @"test"; 

const char *clearText = [stringToEncript UTF8String]; 

unsigned char md[SHA_DIGEST_LENGTH]; 
SHA1((unsigned char *)clearText, strlen(clearText), md); 

for(int i=0; i<SHA_DIGEST_LENGTH; i++) 
    printf("%x", md[i]); 

とPHPで私が書いた:

$stringToEncrypt = "test"; 

$hash = sha1(utf8_encode($stringToEncrypt)); 
echo $hash; 

最初のコードの出力は次のとおりです。

a94a8fe5ccb19ba61c4c873d391e987982fbbd3

第2のコードの出力は、

a94a8fe5 ccb19ba61c4c0873d391e987982fbbd3

ご覧のとおり、「0」が欠落しています。何が悪いですか?

+0

"%02x"をprintf文字列として使用すると、あなたはそこでの期待通りの結果を得ることができます。 私は問題を見ると思います。 openssl_sign()はSHA1ハッシュを行います。$ stringToEncryptに渡します。あなた自身でハッシュを行うと、ハッシュのハッシュに署名することになります。 – caf

+0

だから私が間違っていたのはアウトプットでした! しかし、署名付き文字列をバイナリエンコードで生成すると、PHPで、署名された文字列がNSDataオブジェクトの.plistファイルを作成する方法がありますか?または、私は署名された文字列のbase64エンコードを作成し、plistファイルにNSStringオブジェクトとして格納する必要がありますか? –

+0

PHPはバイナリを出力できます。しかし、base64版の出力はおそらく解析しやすくなり、デバッグも簡単になります。 – caf