>CFCA Signature with the PrivateKey


JAVA

public static final String CHAR_ENCODING = "UTF-8"; public static final String AES_ALGORITHM = "AES/ECB/PKCS5Padding"; public static final String RSA_ALGORITHM = "RSA/ECB/PKCS1Padding"; public static String sign(byte[] data, String privateKey) throws Exception { byte[] keyBytes = decryptBASE64(privateKey); PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); PrivateKey privateKey2 = keyFactory.generatePrivate(pkcs8EncodedKeySpec); Signature signature = Signature.getInstance("MD5withRSA"); signature.initSign(privateKey2); signature.update(data); return encryptBASE64(signature.sign()); } public static byte[] decryptBASE64(String key) throws Exception { return Base64.decodeBase64(key.getBytes(CipherConfigure.CHAR_ENCODING)); }

PHP

function rsaPrivateSign($data,$path,$password){ $pubKey = file_get_contents($path); $results=array(); openssl_pkcs12_read($pubKey,$results,$password); $private_key=$results['pkey']; $pi_key = openssl_pkey_get_private($private_key);//This function can be used to determine if the private key is available and, if so, returns the Resource ID openssl_sign($data, $signature,$private_key,"md5"); $signature=base64_encode($signature); return $signature; }

C#

public static string privateSign(string privateKeyPath,string data ,string pfxPassword) { X509Certificate2 objx5092; if (string.IsNullOrWhiteSpace(pfxPassword)) { objx5092 = new X509Certificate2(privateKeyPath); } else { objx5092 = new X509Certificate2(privateKeyPath, pfxPassword); } RSACryptoServiceProvider rsa = objx5092.PrivateKey as RSACryptoServiceProvider; byte[] dataencod = Convert.FromBase64String(data); byte[] reslut = rsa.SignData(dataencod, "MD5");//为证书采用MD5withRSA 签名 return Convert.ToBase64String(reslut); }

GOLang

///The private key is encrypted according to the private key certificate path and password, and Base64 data will be returned func Sign(data string,path string,password string)(string,error){ var pfxData []byte var erro error var private *rsa.PrivateKey pfxData,err := ioutil.ReadFile(path) if err != nil { erro = err } var priv interface{} //解析证书 priv,_,err = pkcs12.Decode(pfxData, password) if err != nil { erro = err } private = priv.(*rsa.PrivateKey) ciphertext,err := base64.StdEncoding.DecodeString(data) if err != nil { erro = err } hash := md5.New() hash.Write(ciphertext) hashed := hash.Sum(nil) signer, err := rsa.SignPKCS1v15(rand.Reader, private , crypto.MD5, hashed[:]) if err != nil { erro = err } base64Str := base64.StdEncoding.EncodeToString(signer) return base64Str, erro }

Python

def gen_sign(unsign_data): path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) doc = os.path.join(path, 'client.pem') with open(doc) as pk: key_data = pk.read() key_data1 =key_data private_keyBytes =base64.b64decode(key_data1) priKey = RSA.importKey(private_keyBytes) signer = Signature_pkcs1_v1_5.new(priKey) digest = MD5.new(unsign_data) sign = signer.sign(digest) signature = base64.b64encode(sign) return signature