WinAPI CryptprotectData および CryptUnprotectData 関数を使用する Java アプリケーションを作成しようとしています。Java JNIを使用してこれを達成しようとしています。JNI を使用するのはこれが初めてで、データの復号化に問題があります。これを Visual Studio でデバッグしたところ、CryptUnprotectData への呼び出しが false を返し、関数が NULL を返していることがわかりました。なぜこれを行っているのかわかりません。
コードは次のとおりです。
JNIEXPORT jbyteArray JNICALL Java_Caller_Decrypt(JNIEnv * env, jobject obj, jbyteArray bytes)
{
int len = env->GetArrayLength(bytes);
jbyte * data = env->GetByteArrayElements(bytes,NULL);
env->ReleaseByteArrayElements(bytes, data, 0);
DATA_BLOB inData = {len, reinterpret_cast<unsigned char *>(data)};
DATA_BLOB outData = {0,NULL};
if(CryptUnprotectData(&inData,NULL,NULL,NULL,NULL,0,&outData))
{
LocalFree(inData.pbData);
jbyteArray buff= env->NewByteArray(len);
env->SetByteArrayRegion(buff,0,len,reinterpret_cast<jbyte *>(outData.pbData));
return buff;
}
else
{
return NULL;
}
}
関連するJavaコードは次のとおりです。
String password = "Password";
Caller c = new Caller();
System.out.println("Password");
byte[] buffer = c.Encrypt(password.getBytes());
System.out.println("Encrypted: " + new String(buffer));
System.out.println("Decrypted: " + new String(c.Decrypt(buffer)));
CryptUnprotectData 関数が false を返す理由がわかりません。C ++を使用してJavaに夢中になってから約1年が経ちました。少し錆びているので、何かを見逃した可能性があります。 JNI。どんな助け/提案も大歓迎です!