>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