Java到Win32加密API

用户名

我有以下从Java作为RSA生成的公钥:

305c300d06092a864886f70d0101010500034b003048024100ab12b3ee64b85bdda7e9744df3210d9b0efc7fbd36385cd903a4f8ee51101bc9c4f0b23583ff090e7d61773e024cbbff4008037cba6538d1c70d865c948716e70203010001

我正在尝试导入密钥,如下所示:

1)将字符串解码为字节数组(Key

public static byte[] DecodeKey(string data)
{
    int count = data.Length;
    byte[] key = new byte[count / 2];
    for (int i = 0; i < count ; i += 2)
        key[i / 2] = Convert.ToByte(data.Substring(i, 2), 16);
    return key;
}

2)CryptAcquireContext使用Microsoft Strong Cryptographic ProviderPROV_RSA_FULL
3)然后CryptImportKey使用上方的键和进行呼叫key.Length

它返回:

提供者的版本错误。

总统詹姆士·波尔克

RSA密钥采用以下SubjectPublicKeyInfo格式,即使用该RSAPublicKey.getEncoded()方法时Java返回格式JavaX509EncodeKeySpec出于历史原因将这种格式称为

这是.NET的不方便格式。您可以检查.NET类,以了解哪种格式最方便。我怀疑最方便的格式是XML格式。以下Java代码段将以这种格式输出RSA公钥:

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.interfaces.RSAPublicKey;
import javax.xml.bind.DatatypeConverter;

public class RSAToXML {

    public static void main(String[] args) throws Exception {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
        kpg.initialize(1024);
        KeyPair keyPair = kpg.generateKeyPair();
        RSAPublicKey rsaPub = (RSAPublicKey) keyPair.getPublic();
        System.out.println("<RSAKeyValue>");
        System.out.print("\t<Modulus>");
        System.out.print(DatatypeConverter.printBase64Binary(rsaPub.getModulus().toByteArray()));
        System.out.println("</Modulus>");
        System.out.print("\t<Exponent>");
        System.out.print(DatatypeConverter.printBase64Binary(rsaPub.getPublicExponent().toByteArray()));
        System.out.println("</Exponent>");
        System.out.println("</RSAKeyValue>");
    }
}

然后,可以使用此输出将RSA公钥导入.NET,如以下C#代码片段所示:

    public static void XmlImport()
    {
        var xmlPubKey = "<RSAKeyValue>\n\t<Modulus>AI0hSZ3hcfJHv1TPSIkT0XeW/HMPPFJMw4/aX5NxfhyVacpb5u6rucDztVNG1pXaBdya9OdO1+mGG250y+QuqP/70uu5QMcMEpCdp8xl0i+cUN9+fHDzse4XR/Kdrl3pKAefSR5QQX8xBScjTO+H+9fXVrrU9TQU6WXmahQnDwDJ</Modulus>\n\t<Exponent>AQAB</Exponent>\n</RSAKeyValue>\n";
        var rsa = RSA.Create();
        rsa.FromXmlString(xmlPubKey);
        Console.WriteLine(rsa.ToXmlString(false));
    }

注意:这使用.NET类,而不是Win32 CryptoAPI。几乎没有理由再使用CryptoAPI。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Win32 API与Java套接字刷新(TCP)

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

如何禁用按钮-Win32 API

来自分类Dev

Win32 API SearchPath失败

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Win32 API 无法 CreateWindowW()

来自分类Dev

在Win32程序中使用XAML Hosting API导航到页面会导致访问冲突

来自分类Dev

Win32的Cortana

来自分类Dev

Win32线程

来自分类Dev

win32 ExportAsFixedFormat

来自分类Dev

使用嵌入式JRE将Shaded Java(jar)构建到Win32可执行文件中?

来自分类Dev

Windows:如何拦截Win32磁盘I / O API

来自分类Dev

调用win32 API并回调类函数

来自分类Dev

在Python中使用WIN32 API CreateProcessAsUser

来自分类Dev

Win32 API独有的功能?

来自分类Dev

Win32 API C ++菜单栏

来自分类Dev

从FlasCC(又名Crossbridge)访问Win32 API

来自分类Dev

C ++ Win32 Api资源文件

来自分类Dev

使用C ++ Win32 API启用视觉样式吗?

来自分类Dev

Win32 API函数GetExplicitEntriesFromAcl()的对应项是什么?

来自分类Dev

使用Win32 API绘制笛卡尔系统

来自分类Dev

C Win32 API:设置复选框的状态

来自分类Dev

PRINTER_INFO_6无法使用WIn32 API

来自分类Dev

具有HWND_BROADCAST的Win32 API SendMessage

来自分类Dev

没有Win32 API的本地帮助内容

来自分类Dev

如何为Win32 API声明变量?

来自分类Dev

如何清除Win32 API中的屏幕

来自分类Dev

无法在Win32 API中读取HWND的内存

来自分类Dev

将变量传递给WIN32 API LPCWSTR?