我需要使用公共密钥来验证Java中的某些数据,但是我似乎无法以无需第三方插件就可以使用Java的方式来格式化密钥。
我正在使用Node.js的crypto库生成密钥,该库为我提供了PKCS#1或选项SPKI,以及.pem或.der文件格式。
我听说Java不支持PKCS#1开箱即用,并且StackOverflow上的几乎所有其他答案都建议使用BouncyCastle或类似工具,但就我而言,我正在编写一个SDK,并且根本负担不起使用库只是阅读此公钥。
因此,我目前正在读取.der格式的密钥,因为它省去了剥离PEM标头并从base-64解码密钥的麻烦。运行此命令时,出现错误:
java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000be:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG
Run Code Online (Sandbox Code Playgroud)
这就是我所拥有的(对不起,它在Kotlin,而不是标题所暗示的Java)
// Here's a key for convenience
val key = Base64.getDecoder().decode("MFUCTgF/uLsPBS13Gy7C3dPpiDF6SYCLUyyl6CFqPtZT1h5bwKR9EDFLQjG/kMiwkRMcmEeaLKe5qdj9W/FfFitwRAm/8F53pQw2UETKQI2b2wIDAQAB");
val keySpec = X509EncodedKeySpec(key)
val keyFactory = KeyFactory.getInstance("RSA")
val publicKey = keyFactory.generatePublic(keySpec) // error thrown here
val cipher = Cipher.getInstance("RSA/NONE/PKCS1Padding")
cipher.init(Cipher.DECRYPT_MODE, publicKey)
Run Code Online (Sandbox Code Playgroud)
目前,我最好的想法是在Node.js端安装一个库,以减少将问题导出为PKCS#8的麻烦,但我想我首先要检查是否丢失了任何东西。
我的代码返回一个PropertyInfo的空白数组
PropertyInfo[] classProperties = typeof(Processor).GetProperties();
Run Code Online (Sandbox Code Playgroud)
此类中的所有属性都是公共的.使用.NET 2.0 Framework.
我也尝试使用我的代码中先前声明的实例:
PropertyInfo[] classProperties = Computer.Processor[0].GetType().GetProperties();
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Default,Instance和Public等绑定.
有任何想法吗?
我正在尝试使用,std::async并std::future在我的应用程序中创建一个后台工作守护程序。我似乎得到的行为表明我根本没有异步运行!
我已经编译了一些代码,演示了对我不起作用的代码:
#include <cstdio>
#include <future>
#include <chrono>
class AsyncTest {
public:
void run() {
printf("Entering run()\n");
std::this_thread::sleep_for(std::chrono::seconds(10));
printf("Exiting run()\n");
}
void start() {
printf("Starting daemon...\n");
std::async(std::launch::async, &AsyncTest::run, this);
printf("Daemon started\n");
}
};
int main(int argc, char *argv[])
{
AsyncTest* test = new AsyncTest();
test->start();
std::this_thread::sleep_for(std::chrono::seconds(15));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在应该很清楚,所需的功能如下:
Starting daemon...
Entering run() <--
Daemon started <-- These two may swap
Exiting run() <------ After 10 seconds
exit() <-- After a further 5 seconds
Run Code Online (Sandbox Code Playgroud)
实际上是这样的: …
首先,不要骂我试图这样做 - 我的老板要我将多个表中的数据列表转储到一个CSV文件中.
此CSV包含两类人员合并为一张表:永久员工和承包商.
某些值的获取方式取决于您所属的类别.例如,如果您是承包商,那么您的职位描述就在contractors.blended_role.如果您是永久性的,职位描述就在roles.blended_role哪里roles.id = staff.role.
所以我试过(像这样):
SELECT
stuff,
(CASE
WHEN c.blended_role IS NULL THEN
r.blended_role
ELSE
c.blended_role
END) as `Job Description`,
morestuff
FROM
everyone e
LEFT JOIN contractors c
ON c.id = e.id
LEFT JOIN staff s
ON s.id = e.id
LEFT JOIN roles r
ON r.id = s.role
Run Code Online (Sandbox Code Playgroud)
但是我遇到了语法错误
You have an error in your SQL syntax; check the manual that corresponds to …Run Code Online (Sandbox Code Playgroud) asynchronous ×1
c# ×1
c++ ×1
c++11 ×1
csv ×1
encryption ×1
java ×1
join ×1
mysql ×1
properties ×1
reflection ×1
sql ×1