最后,我们来看下Java中的 SHA256withRSA 签名
package com.bkwallet.utils;
import java.nio.charset.StandardCharsets;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.interfaces.RSAPublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.base64;
import java.util.HashMap;
import java.util.Map;
public class SignatureUtil {
public static final String KEY_ALGORITHM RSA
public static final String SIGNATURE_ALGORITHM SHA256withRSA
private static final String UTF8 UTF-8
public static String gongyao MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKKBPvYZm hrwFEN4/RQ0YK4VjJlVinqSjZkHq676L5sklEj 8xR2opwzJeh7kAFhwjCPTvEvZM6ht6PaZ3raRuyUoQejnPXl9JAOp9Ly0dq2FzaOblQtvfyqKqdudE 5c0PW7 j9K5IyK6o0zSD1UF06MgMEHGUOa1YVG7Zz 2JQIDAQAB
public static String miyao MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIooE 9hmb6GvAUQ3j9FDRgrhWMmVWKepKNmQerrvovmySUSPzFHainDMl6HuQAWHCMI9O8S9kzqG3o9pnetpG7JShB6Oc9eX0kA6n0vLR2rYXNo5uVC29/Koqp250T7lzQ9bv6P0rkjIrqjTNIPVQXToyAwQcZQ5rVhUbtnP7YlAgMBAAECgYBpSzpGS0B9sPpDciOwXNQqA6FZe7G/w D l8TNYnaK8Y2Dr3ByAlerFJWi7hXVNwSivwTN4MnOvO3MMIha1gBnQCFStI4PjRv2qz6vsGfzZKFadUw3ngzGhT5UtIVAd IFbbr4J cGjGMmF5lIEaKrRCS5u4p11uf6LmhvbBTm0QJBAMQA7RYimdU9UStIm/RSkLQg6K89Om3S2AFXwqymiqhM4m6n7lRTE1xNX4pGm1BV8C/qL0d7AHbrJBFi hN5onMCQQC0cjAXmKdnfhTo0IvYtzpXr77odBz4zt2Ake65ssBJEWFzle69MbWgkbrTKLLjGxBwM C7fPDGNckqhlpjMGcHAkB vcKRT6p9svqrrHX8FO xKp6LwmHn5jD7HU6q6b47egvpVfnM2TNpujaPaXzBA/EeaqZL6IOyYfaer4vZ0At1AkEAqezuRQpIezlMT4I0b7z8gB7MVPMjZVrJVI4YlV8znJt1ffevfxMUy0Tw/nDRJPUTodX4yBZ8VuvHqPgknkuyeQJBALYpXGOH/GjlSVtnhq7eZxvoEqiBLawW5k7Rl1IyNdGR2qxY/nnoCyP2mMCs1Ba05sCcX08zzOzMPvttbSyjqPI
public static Map String, String genPair() throws Exception {
HashMap hashMap new HashMap(4);
KeyPairGenerator instance KeyPairGenerator.getInstance( RSA
instance.initialize(1024);
KeyPair generateKeyPair instance.generateKeyPair();
PrivateKey privateKey generateKeyPair.getPrivate();
PublicKey publicKey generateKeyPair.getPublic();
String str new String(base64.getEncoder().encode(privateKey.getEncoded()));
String str2 new String(base64.getEncoder().encode(publicKey.getEncoded()));
hashMap.put( sk , str);
hashMap.put( pk , str2);
return hashMap;
public static String sign(byte[] bArr, String str) throws Exception {
PrivateKey generatePrivate KeyFactory.getInstance( RSA ).generatePrivate(new PKCS8EncodedKeySpec(base64Utils.base64ToChar(str)));
Signature instance Signature.getInstance(SIGNATURE_ALGORITHM);
instance.initSign(generatePrivate);
instance.update(bArr);
return base64Utils.byteArrayTobase64(instance.sign());
public static boolean verify(String str, String str2, String str3) throws Exception {
Signature instance Signature.getInstance(SIGNATURE_ALGORITHM);
instance.initVerify((RSAPublicKey) KeyFactory.getInstance( RSA ).generatePublic(new X509EncodedKeySpec(base64.getDecoder().decode(str2))));
instance.update(str.getBytes(StandardCharsets.UTF_8));
return instance.verify(base64.getDecoder().decode(str3));
public static void main(String[] strArr) throws Exception {
Map String, String genPair genPair();
String str genPair.get( sk
System.out.println(str);
System.out.println(genPair.get( pk
System.out.println( ----------------
System.out.println(sign( { phone : 13629794569 , timestamp :1630000000000, device : Android } .getBytes( UTF-8 ), str));
}
三、python实现SHA256withRSA 签名
from Crypto.PublicKey import RSA from Crypto.Signature import PKCS1_v1_5 from Crypto.Hash import MD5, SHA1, SHA256 import base64 from flask import current_app import warnings warnings.filterwarnings( ignore )



