标签: cryptoapi

如何在Java中生成HMAC等效于Python示例?

我正在寻找通过 Java中的Oauth实现一个获得Twitter授权的应用程序.第一步是获取请求令牌.这是app引擎的Python示例.

为了测试我的代码,我正在运行Python并使用Java检查输出.以下是Python生成基于哈希的消息验证代码(HMAC)的示例:

#!/usr/bin/python

from hashlib import sha1
from hmac import new as hmac

key = "qnscAdgRlkIhAUPY44oiexBKtQbGY0orf7OV1I50"
message = "foo"

print "%s" % hmac(key, message, sha1).digest().encode('base64')[:-1]
Run Code Online (Sandbox Code Playgroud)

输出:

$ ./foo.py
+3h2gpjf4xcynjCGU5lbdMBwGOc=
Run Code Online (Sandbox Code Playgroud)

如何在Java中复制此示例?

我在Java中看到过HMAC的一个例子:

try {
    // Generate a key for the HMAC-MD5 keyed-hashing algorithm; see RFC 2104
    // In practice, you would save this key.
    KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");
    SecretKey key = keyGen.generateKey();

    // Create a MAC object …
Run Code Online (Sandbox Code Playgroud)

java sha1 oauth cryptoapi hmac

50
推荐指数
2
解决办法
5万
查看次数

从一个用户导入xml字符串的DSA密钥失败.权限?安装破损?坏KSP?

用户最近在使用我的软件时报告了一个奇怪的错误.我使用DSA签名来验证许可证.当软件导入公钥以验证签名时,DSA提供程序的FromXmlString方法将抛出CryptographicException,其描述为" 密钥无法在指定状态下使用 ".

从System.Security.Cryptography.Utils.CreateProvHandle调用的_OpenCSP方法似乎返回NTE_BAD_KEY_STATE(0x8009000b).这是第一次有人向我报告此错误,并且该代码多年来没有变化.

造成这种情况的可能原因是什么?屏蔽权限错误?CAPI安装破损?被.net信任/权限设置阻止?密钥存储提供商存储的垃圾,还是KSP向cryptoapi返回意外的东西?

我已经搜索了错误代码/说明/等,但没有找到任何真正的答案,可能会导致这个...

失败的代码的隔离版本在这里:http: //forum.huagati.com/getattachment.ashx?fileid = 78

using System;
using System.Security.Cryptography;
using System.Reflection;

public class Test
{
  public static void Main()
  {
    try
    {
      string key = "<DSAKeyValue><P>wrjxUnfKvH/1s5cbZ48vuhTjflRT5PjOFnr9GeUPZSIoZhYATYtME4JRKrXBtSkyioRNtE1xgghbGAyvAJ5jOWw88fLBF+P1ilsZyq72G1YcbB+co8ImQhAbWKmdCicO9/66Th2MB+7kms/oY3NaCzKEuR7J3b23dGrFpp4ccMM=</P><Q>xmxoSErIJCth91A3dSMjC6yQCu8=</Q><G>bwOLeEaoJHwSiC3i3qk9symlG/9kfzcgrkhRSWHqWhyPAfzqdV1KxJboMpeRoMoFr2+RqqKHgcdbzOypmTeN4QI/qh4nSsl5iEfVerarBOrFuRdOVcJO0d8WE233XQznd1K66nXa5L8d9SNZrM6umZ1YuBjhVsTFdPlIXKfGYhk=</G><Y>wZnEEdMUsF3U3NBQ8ebWHPOp37QRfiBn+7h5runN3YDee1e9bC7JbJf+Uq0eQmU8zDs+avEgD68NpxTKEHGr4nQ3rW6qqacj5SDbwO7nI6eN3wWrVhvrWcQm0tUO93m64HsEJREohfoL+LjqgrqIjZVT4D1KXE+k/iAb6WKAsIA=</Y><J>+zmcCCNm2kn1EXH9T45UcownEe7JH+gl3Lw2lhVzXuX/dYp5sGCA2lK119iQ+m3ogjOuwABATCVFLo6J66DsSlMd0I8WSD5WKPvypQ7QjY0Iv71J2N0FW0ZXpMlk/CE8zq4Z7arM1N564mNe</J><Seed>QDrZrUFowquY5Uay8YtUFOXnv28=</Seed><PgenCounter>Gg==</PgenCounter></DSAKeyValue>";

      DSACryptoServiceProvider csp2 = new DSACryptoServiceProvider();
      csp2.FromXmlString(key);

      Console.WriteLine("Success!");
    }
    catch (Exception ex)
    {
      int hResult = 0;
      try
      {
          PropertyInfo pi = typeof(Exception).GetProperty("HResult", BindingFlags.NonPublic | BindingFlags.Instance);
          hResult = (int)pi.GetValue(ex, null);
      }
      catch (Exception ex2)
      {
          Console.WriteLine("HResult lookup failed: " + ex2.ToString());
      }
      Console.WriteLine("Initializing CSP …
Run Code Online (Sandbox Code Playgroud)

.net c# cryptography cryptoapi dsa

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

Window C/C++加密API示例和提示

我问这个问题是因为我花了大部分时间在msdn docs和其他不透明的资源上搜索关于如何开始使用Windows C/C++ Crypto API的简单直接指导.

我想看到的是一些示例代码,典型的包括路径,链接指南等,真正有用的东西.我知道这是一个不精确的问题,但我认为不精确的答案根本没有.

我会用我自己微薄的发现来推动这个球......

c c++ windows cryptoapi mscapi

24
推荐指数
3
解决办法
4万
查看次数

Delphi相互认证

我使用WinINet库连接到一个网站.

使用Internet Explorer(Win10)它可以工作并向我显示选择要使用的证书的消息.

这是我调用的delphi代码:

FUNCTION TRAD.lastOrganization(): Integer;
VAR
  js:TlkJSONobject;
  ws: TlkJSONstring;
  url, resp: String;
  count,statusCodeLen, bodyCodeLen: Cardinal;
  header,tmp: String;
  buffer, body: String;
  statusCode: ARRAY [0 .. 1024] OF Char;
  bodyCode: ARRAY [0 .. 1024] OF Char;
  UrlHandle: HINTERNET;
BEGIN
  buffer := '00000000000000000000';
  url := contextUrl + '/rest/organization/count';
  UrlHandle := InternetOpenUrl(NetHandle, PChar(url), nil, 0, INTERNET_FLAG_RELOAD, 0);
  IF NOT ASSIGNED(UrlHandle) THEN
    SHOWMESSAGE('Unable to read the amount of Organization using the URL ' + url + ': ' +  SysErrorMessage(GetLastError));
  statusCodeLen := Length(statusCode); …
Run Code Online (Sandbox Code Playgroud)

delphi cryptoapi mutual-authentication microsoft-edge

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

如何使用Java 8从Microsoft密钥库加载下一代证书?

我正在尝试直接从Microsoft商店加载证书,以避免必须从MS商店导出证书,然后将它们导入JKS商店.

我设法使用SunMSCAPI直接从MS商店使用传统加密从典型的AD CS Web服务器模板创建证书.

但是,SunMSCAPI不支持我正在使用的现代CNG密码,特别是RSA-2048非对称加密,SHA-384散列和ECDSA-384数字签名.

是否可以使用Java从MS商店加载下一代证书?我在jdk1.8.0_45.是否有可以处理CNG的现有JCE提供商替代SunMSCAPI?我怀疑它必须使用JNI或JNA来访问本机Windows CNG API.

我试过Pheox JCAPI但没有成功.它支持RSA和DSA,但不支持ECDSA.我没有尝试过Bouncy Castle,但我的理解是它没有提供这样的能力.

还有其他现成的JCE提供商替代SunMSCAPI可以处理CNG我可以尝试吗?

更新:JCAPI v2仅支持明年针对v3计划的RSA,ECDH支持.

更新:有人建议为Java 8安装Java Cryptography Extension(JCE)Unlimited Strength Jurisdiction Policy Files也许可以解决这个问题,但是没有,这没有帮助,因为问题是SunMSCAPI仅支持RSA密码,可以看出看源代码.

java ssl cryptography cryptoapi elliptic-curve

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

来自Python的Wincrypt的Diffie-Hellman(到RC4)

我目前正在开发一个用C++编写的项目,该项目利用CryptoAPI执行Diffie-Hellman密钥交换.我在使用这个工作时遇到了一些麻烦,因为我得到的最终RC4会话密钥不能用于加密Python中的相同文本(使用pycrypto).

执行Diffie-Hellman密钥交换的C++代码取自msdn,但此处包含后代:

#include <tchar.h>
#include <windows.h>
#include <wincrypt.h>
#pragma comment(lib, "crypt32.lib")

// The key size, in bits.
#define DHKEYSIZE 512

// Prime in little-endian format.
static const BYTE g_rgbPrime[] = 
{
    0x91, 0x02, 0xc8, 0x31, 0xee, 0x36, 0x07, 0xec, 
    0xc2, 0x24, 0x37, 0xf8, 0xfb, 0x3d, 0x69, 0x49, 
    0xac, 0x7a, 0xab, 0x32, 0xac, 0xad, 0xe9, 0xc2, 
    0xaf, 0x0e, 0x21, 0xb7, 0xc5, 0x2f, 0x76, 0xd0, 
    0xe5, 0x82, 0x78, 0x0d, 0x4f, 0x32, 0xb8, 0xcb,
    0xf7, 0x0c, 0x8d, 0xfb, 0x3a, 0xd8, 0xc0, …
Run Code Online (Sandbox Code Playgroud)

c++ python encryption cryptoapi pycrypto

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

将X509 PEM文件加载到Windows CryptoApi中

我是整个Crypto的新手,所以我求一些基本的指针.

我需要将.PEM(X509)"----- BEGIN RSA XXX KEY ----- ----- END RSA XXX KEY -----"加载到Windows Crypto Api上下文中以与C++一起使用(我找到了Python和.NET的示例,但它们使用了我无法与普通Windows Crypto Api相关的特定函数

我知道如果我有HCRYPTKEY后如何加密/解密.但是,我只是不知道如何在.PEM文件中导入Base64 blob并获得我可以使用的HCRYPTKEY.

我有这种感觉,除了简单地调用CryptDecodeObject()之外还有更多的东西.

任何可以让我走上正轨的指针?我已经失去了两天做"试错"编程而无处可去.

c++ windows cryptography cryptoapi pem

14
推荐指数
2
解决办法
2万
查看次数

NIST SP 800-56A级联/单步密钥派生函数的现有实现?

有谁知道NIST SP 800-56A级联密钥派生函数/ CONCAT KDF(最好用Java)的任何现有实现?

密钥推导函数记录在NIST出版物的第5.8.1节中:使用离散对数密码学的双智能密钥建立方案的建议

链接到这里:http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf

微软的CNG 在这里有一个实现,但是如果你比较微软实现的功能,与NIST SP 800-56A中记录的参数相比,它们不相符,并且微软的实现是无法使用的.我试图用C++实现一个示例程序,但是我无法匹配这些参数.

有人能够尝试实现它或知道任何现有的实现吗?

我正在寻找一种能够证明为什么它对NIST规范是准确的实现.我已经看到了一些实现,我觉得它们对NIST规范不准确(缺少参数,无效的逻辑流程等).

如果您可以自己实现它,我总是很乐意分享我自己的源代码进行辩论.谢谢!这对开源社区是一个很好的贡献!

编辑:

感谢@Rasmus Faber,我终于可以结束这个问题,并希望回答其他人对我的同样问题.

这是我根据@Rasmus Faber和我的原始代码编辑的代码:

ConcatKeyDerivationFunction.java

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 
 * Implementation of Concatenation Key Derivation Function<br/>
 * http://csrc.nist.gov/publications/nistpubs/800-56A/SP800-56A_Revision1_Mar08-2007.pdf
 *
 */

public class ConcatKeyDerivationFunction {

    private static final long MAX_HASH_INPUTLEN = Long.MAX_VALUE;
    private static final long UNSIGNED_INT_MAX_VALUE = 4294967295L;
    private static MessageDigest md;

    public ConcatKeyDerivationFunction(String hashAlg) throws NoSuchAlgorithmException {
        md = MessageDigest.getInstance(hashAlg);
    }

    public …
Run Code Online (Sandbox Code Playgroud)

c++ java security cryptography cryptoapi

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

静态地与openssl lib链接

我 现在按照本指南手动构建openssl(静态库)当我尝试将我的MFC测试应用程序与libeay32.lib链接时出现以下错误:

1>Linking...
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFreeCertificateContext@4 referenced in function _capi_free_key
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertGetCertificateContextProperty@16 referenced in function _capi_get_prov_info
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertOpenStore@20 referenced in function _capi_open_store
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFindCertificateInStore@24 referenced in function _capi_find_cert
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertEnumCertificatesInStore@8 referenced in function _capi_find_cert
1>libeay32.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertCloseStore@8 referenced in function _capi_find_key
1>libeay32.lib(e_capi.obj) : error …
Run Code Online (Sandbox Code Playgroud)

windows openssl cryptoapi visual-c++

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

Binance订单:此请求的时间戳比服务器时间早1000毫秒

我正在编写一些 Python 代码来使用 Binance API 创建订单:

from binance.client import Client

client = Client(API_KEY, SECRET_KEY)

client.create_order(symbol='BTCUSDT',
                    recvWindow=59999, #The value can't be greater than 60K
                    side='BUY',
                    type='MARKET',
                    quantity = 0.004)
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到以下错误消息:

"BinanceAPIException: APIError(code=-1021): Timestamp for this request was 1000ms ahead of the server's time."
Run Code Online (Sandbox Code Playgroud)

我已经检查了币安服务器时间和本地时间之间的差异(以毫秒为单位):

import time
import requests
import json
url = "https://api.binance.com/api/v1/time"
t = time.time()*1000
r = requests.get(url)

result = json.loads(r.content)

print(int(t)-result["serverTime"]) 

OUTPUT: 6997
Run Code Online (Sandbox Code Playgroud)

看来60000的recvWindow还是不够用(但也可能不会超过60K)。我仍然遇到同样的错误。有人知道我该如何解决这个问题吗?

提前谢谢了!

python datetime cryptoapi binance-api-client

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