ビュー:

動作:
例えばPHPでURLをビルドした場合、アクセスしようとするとエラーメッセージが表示されます:


500 - Internal Server Error
DocuWare.Gapi.Utils.Web.DWIntegrations.EX_INVALID_PASS_PHRASE


解決方法
この問題は、URLが正しく暗号化されていないために発生します。暗号化の際には、以下を考慮する必要があります:

パスフレーズは対称暗号化アルゴリズムを使用します。
以下のパラメータを使用します:

  • ブロック・サイズ = 128 ビット
  • 暗号サイズ = CBC (暗号ブロック連鎖)
  • 初期化ベクトル(IV) = 128 ビット
  • 鍵長 = 256 ビット
  • ソルトなし
  • PKCS7 パディング

Base64エンコーディングは2回必要です。 パラメータ&lcと&qはBase64エンコーディングされる必要があります。 その後、すべてのパラメータが暗号化され、結果は再びBase64エンコーディングされる必要があります。

以下は、PHP言語で使用できるJavaScriptの例です:


var dwuser = "<USERNAME>";
var dwpass = "<PASSWORD>";
var docid = "6";
var cabinetid = "File Cabinet GUID";

var key = encodeURI("PASSPHRASE");
var passphrase = sha512(key);
var passphraseArray = parseHexString(passphrase);
var encryption_key = createHexString(passphraseArray.splice(0, 8));
var iv = createHexString(passphraseArray.splice(0, 4));

console.log("パスフレーズ: " + passphrase);
console.log("パスフレーズ配列: \n" + passphraseArray);
console.log("暗号化キー: " + encryption_key);
console.log("IV: " + iv);

var loginstring = convertToUrlTokenFormat(window.btoa("User="+dwuser+"\nPwd="+dwpass));
var searchstring = convertToUrlTokenFormat(window.btoa('[Index Field]='+docid));

var url = "https://server.docuware.cloud/DocuWare/Platform/WebClient/1/Integration";
var encrypturl = "&p=V&lc="+loginstring+"&fc="+cabinetid
encrypturl += "&q="+searchstring+"&dt=Download";
console.log("before encryptionn" + encrypturl);
var ep = encrypt(encrypturl, encryption_key, iv);
console.log("暗号化されました" + ep);
ep = convertToUrlTokenFormat(ep);
console.log("Encrypted in Base64 URL token formatn" + ep);
url += "?&ep=" + ep;

console.log("URL: " + url);

function sha512(str) {
return (CryptoJS.SHA512(str)).toString(CryptoJS.enc.Hex);
}

function convertToUrlTokenFormat(str) {
// パディングに等しいカウント
var padding = (str.split("=").length - 1);
// 等号を削除
var returnVal = str.replace(/=/g,"");
// パディングを追加
returnVal = returnVal + padding;
// + を - に、/ を _ に変更
returnVal = returnVal.replace(/+/g,"-");
returnVal = returnVal. replace(//g,"_");

return returnVal;
}

function encrypt(str, key, iv) {
var cipher = CryptoJS.AES.encrypt(str, CryptoJS.enc.Hex.parse(key), {
keySize: 256,
blockSize: 128,
iv:CryptoJS.enc.Hex.parse(iv),
padding:CryptoJS.pad.Pkcs7,
mode:CryptoJS.mode.CBC
});
return String(cipher);
}

function parseHexString(str) {
var result = [];
while (str.length >= 8) {
result.push(parseInt(str.substring(0, 8), 16));
str = str.substring(8, str.length);
}
return result;
}

function createHexString(arr) {
var result = "";
var z;

for (var i = 0; i < arr.length; i++) {
var str = arr[i].toString(16);

z = 8 - str.length + 1;
str = Array(z).join("0") + str;

result += str;
}

return result;
}.

クラウドとオンプレミスの両方の組織に適用可能なKBA。

注意:この記事英語からの翻訳ですこの記事まれる情報オリジナルの英語版製品づくものです。翻訳版記事使用されている文法などには、細かいりがある場合があります。翻訳正確さを完全保証することは出来かねますがほとんどの場合、十分情報られるとわれます。万一、疑問じた場合、英語版記事えてごください