0

MD5 munge のメッセージを準備する Java コードがあります。

private static char[] jimsCopyRight = {

'C', 'o', 'p', 'y', 'r', 'i', 'g', 'h', 't', ':', ' ', 0xa9, ' '};

で使用される

StringBuffer message = new StringBuffer();

message.append(name.toLowerCase()); message.append(新しい文字列(jimsCopyRight));

を使用してメッセージを印刷すると

for(int i = 0; i < message.length(); i++){

System.out.println(" i = " + i + " char " + message.substring(i, i + 1) + " charAT " + message.charAt(i)); }

i = 14 char \251 charAT \251 を取得し、message.toString は jimCopyright: \251 です。

同じ文字で NSMutableString を作成する必要があります。

私が試したことの中で

wDevCopyright = [NSString stringWithFormat:@"jimCopyright: %c ", 0xa9];
for(int i = 0; i < [message length]; i++){
  NSLog(@"i = %d char %c %d", i, [message characterAtIndex:i], [message characterAtIndex:i]);
 }

i = 14 文字 © 169

NSMutableString を StringBuffer と同じにするための助けをいただければ幸いです。


問題は、MD5 で 2 つの文字列を変更すると、0xa9 を追加すると異なる結果が得られることです。プリントは弦を見るためのものです。

Java の char[] と NSMutableString の構造に関係があると思います。私はそれらが同じ価値観であるとは信じていません。

私はいくつかのCコードを持っており、著作権を次のように宣言しています

#define jimsCopyRight  "Copyright: � "

Java MD5 と C MD5 の著作権は同じです。

4

2 に答える 2

2

著作権記号はあなたが望んでいたものですよね?あなたの質問によると、それはあなたが得たものです。だから問題は何ですか?

(これが魔法数が悪い理由です。コードだけでは、どのエンコーディングが0xa9必要かわかりません。)

なぜ251ではなく169と表示されるのか疑問に思われる場合は、Javaが8進数(base-8)の文字エスケープシーケンスを出力するのに対し%d、C標準ライブラリではCoreFoundationとFoundationが値を10進数(base- 10)。\251は251文字ではありません。値を8進数として出力する場合は使用%oし、16進数(基数16)として出力する場合は%xを使用します。または、Calculator.appのプログラミングモードを使用して、251を8進数から10進数に変換します。

ところで、Javaコードの場合と同じように、%@フォーマットシーケンスと関数を使用して、ユーザー名を文字列に挿入できます。NSUserNameハードコーディングする必要はありません。

于 2010-11-20T23:03:06.170 に答える
0

Objective-C バージョンの「jim[s]Copyright」に「s」がありません。

于 2010-11-21T09:28:04.567 に答える