python导出excel文件数字签名_[求助帖] Python 生成数字签名

对方提供的写法是 Java 和 PHP,我想把他变成 Python 的,哪位大神帮忙指点一下。

Java 的写法

import org.apache.commons.codec.binary.Base64;

import java.security.KeyFactory;

import java.security.PrivateKey;

import java.security.Signature;

import java.security.spec.PKCS8EncodedKeySpec;

public class SHA256WithRSAAlgo {

private static String consumerId = "b68d2a72...."; // Trimmed for security reason

private static String baseUrl = "https://api-gateway.walmart.com/v3/feeds";

private static String privateEncodedStr = "MIICeAIBADANBgkqhkiG9w0BAQEFAA......"; //Trimmed for security reasons

public static void main(String[] args) {

String httpMethod = "GET";

String timestamp = String.valueOf(System.currentTimeMillis());

String stringToSign = consumerId + "\n" + baseUrl + "\n" + httpMethod + "\n" + timestamp + "\n";

String signedString = SHA256WithRSAAlgo.signData(stringToSign, privateEncodedStr);

System.out.println("Signed String: " + signedString);

}

public static String signData(String stringToBeSigned, String encodedPrivateKey) {

String signatureString = null;

try {

byte[] encodedKeyBytes = Base64.decodeBase64(encodedPrivateKey);

PKCS8EncodedKeySpec privSpec = new PKCS8EncodedKeySpec(encodedKeyBytes);

KeyFactory kf = KeyFactory.getInstance("RSA");

PrivateKey myPrivateKey = kf.generatePrivate(privSpec);

Signature signature = Signature.getInstance("SHA256withRSA");

signature.initSign(myPrivateKey);

byte[] data = stringToBeSigned.getBytes("UTF-8");

signature.update(data);

byte[] signedBytes = signature.sign();

signatureString = Base64.encodeBase64String(signedBytes);

} catch (Exception e) {

e.printStackTrace();

}

return signatureString;

}

}

PHP 的写法

$URL = //Walmart API URL along with path and query parameters

$RequestMethod = //Request method type i.e GET, POST

$Timestamp = round(microtime(true) * 1000); //Current system timestamp

function _GetWalmartAuthSignature($URL, $RequestMethod, $Timestamp) {

$WalmartPrivateKey = //Your Walmart Private Key;

$WalmartConsumerID = //Your Walmart Comsumer Id;

// CONSTRUCT THE AUTH DATA WE WANT TO SIGN

$AuthData = $WalmartConsumerID."\n";

$AuthData .= $URL."\n";

$AuthData .= $RequestMethod."\n";

$AuthData .= $Timestamp."\n";

// GET AN OPENSSL USABLE PRIVATE KEY FROMM THE WARMART SUPPLIED SECRET

$Pem = _ConvertPkcs8ToPem(base64_decode($WalmartPrivateKey));

$PrivateKey = openssl_pkey_get_private($Pem);

// SIGN THE DATA. USE sha256 HASH

$Hash = defined("OPENSSL_ALGO_SHA256") ? OPENSSL_ALGO_SHA256 : "sha256";

if (!openssl_sign($AuthData, $Signature, $PrivateKey, $Hash))

{ // IF ERROR RETURN NULL return null; }

//ENCODE THE SIGNATURE AND RETURN

return base64_encode($Signature);

}

function _ConvertPkcs8ToPem($der)

{

static $BEGIN_MARKER = "-----BEGIN PRIVATE KEY-----";

static $END_MARKER = "-----END PRIVATE KEY-----";

$key = base64_encode($der);

$pem = $BEGIN_MARKER . "\n";

$pem .= chunk_split($key, 64, "\n");

$pem .= $END_MARKER . "\n";

return $pem;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值