1

API を作成していますが、クライアント側インターフェースで CryptoJs を使用してハッシュを生成する際に問題があります

私のjs関数はこれを行います:

console.log(" username: '" + $rootScope.username + "'");
console.log("timestamp: '" + timestamp + "'");  
console.log("  request: '" + req + "'");
console.log("  entropy: '" + "dragonsahead" + "'");
console.log(" password: '" + $rootScope.password + "'");
var message = $rootScope.username+timestamp+req+"dragonsahead";
console.log("  message: '" + message +"'");
var hash = CryptoJS.HmacSHA1(message, $rootScope.password).toString();
console.log("     HASH: '" + hash + "'");
return hash;

$rootScope.usernameおよび$rootScope.passwordユーザー入力です。

JS ログ:

 username: 'admin' 
timestamp: '1394643128.478' 
  request: '/login' 
  entropy: 'dragonsahead' 
 password: 'e1a47a0407d876c8187b1e984a6813abde8160af' 
  message: 'admin1394643128.478/logindragonsahead' 
     HASH: '5061875265279c7378c95c9536feade1c610492d' 

サーバー側のログで、ハッシュが一致していないことがわかりました。PHP サーバー ログ:

2014-03-12 16:52:08 - INFO -->  username: 'admin' 
2014-03-12 16:52:08 - INFO --> timestamp: '1394643128.478' 
2014-03-12 16:52:08 - INFO -->   request: '/login' 
2014-03-12 16:52:08 - INFO -->   entropy: 'dragonsahead' 
2014-03-12 16:52:08 - INFO -->  password: 'e1a47a0407d876c8187b1e984a6813abde8160af' 
2014-03-12 16:52:08 - INFO -->   message: 'admin1394643128.478/logindragonsahead' 
2014-03-12 16:52:08 - INFO -->      HASH: '4c34a29aa05059d5016bd74796407de3d2e5428c' 
2014-03-12 16:52:08 - INFO -->CLIENTOKEN: '5061875265279c7378c95c9536feade1c610492d'

この後、このサイトをチェックしたところ、サーバーによって構築されたハッシュは正しいものでした。そこで、CryptoJS を空白のページ (Google など) にロードして、何が起こるかを確認することにしました。

> var jq = document.createElement('script');
> jq.src = "https://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha1.js";
> document.getElementsByTagName('head')[0].appendChild(jq);
<script src=​"https:​/​/​crypto-js.googlecode.com/​svn/​tags/​3.1.2/​build/​rollups/​hmac-sha1.js">​&lt;/script>​
>var test = CryptoJS.HmacSHA1("admin1394643128.478/logindragonsahead",'e1a47a0407d876c8187b1e984a6813abde8160af')
undefined
>test.toString()
"4c34a29aa05059d5016bd74796407de3d2e5428c"

CryptoJS が正しいハッシュを返したので、JavaScript 変数を台無しにしている可能性があります。何が変数を台無しにしている可能性があるのか​​ わかりません...

4

1 に答える 1