小编CJx*_*JxD的帖子

在没有库的情况下用Java读取PKCS#1或SPKI公钥

我需要使用公共密钥来验证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的麻烦,但我想我首先要检查是否丢失了任何东西。

java encryption public-key-encryption java-security

3
推荐指数
1
解决办法
1085
查看次数

C#反射帮助?(的GetProperties)

我的代码返回一个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等绑定.

有任何想法吗?

c# reflection properties

2
推荐指数
1
解决办法
328
查看次数

std :: async正在阻止/暂停父线程

我正在尝试使用,std::asyncstd::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)

实际上是这样的: …

c++ multithreading asynchronous c++11

2
推荐指数
1
解决办法
1718
查看次数

如果列值为null,请使用其他列

首先,不要骂我试图这样做 - 我的老板要我将多个表中的数据列表转储到一个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)

mysql sql csv join

1
推荐指数
1
解决办法
4621
查看次数