Heim >Backend-Entwicklung >PHP-Tutorial >Beispiel für das Andocken von PHP an Java zum Hinzufügen und Überprüfen von Signaturen im wirklichen Leben

Beispiel für das Andocken von PHP an Java zum Hinzufügen und Überprüfen von Signaturen im wirklichen Leben

墨辰丷
墨辰丷Original
2018-05-30 14:53:521687Durchsuche

In diesem Artikel wird hauptsächlich das praktische Beispiel zum Hinzufügen und Überprüfen von Signaturen zwischen PHP und Java vorgestellt. Interessierte Freunde können sich darauf beziehen. Ich hoffe, dass es für alle hilfreich ist.

Die von mir implementierte Methode besteht hauptsächlich darin, den von Java generierten Schlüssel in einen Schlüssel im PEM-Format umzuwandeln, der von PHP erkannt werden kann. Andere Signaturen und Überprüfungen werden durch Aufrufen der integrierten Signaturmethode von openssl durchgeführt.

Die von Java generierten Schlüssel sind hauptsächlich Zeichenfolgen, während der PEM-Formatschlüssel eine 64-Bit-Zeile mit einem Dateiformat aus dem folgenden Header und Tail ist und PHP dann die entsprechende PEM-Formatzeichenfolge erhält.

PEM-Formatschlüssel

-----BEGIN PUBLIC KEY-----
//64chars一行(多行)
-----END PUBLIC KEY-----
-----BEGIN RSA PRIVATE KEY-----
//64chars一行(多行)
-----END RSA PRIVATE KEY-----

1.java Convert der Schlüssel zum PHP-Code im PEM-Format

/**
 * 将字符串格式公私钥格式化为pem格式公私钥
 * @param $secret_key
 * @param $type
 * @return string
 */
public static function format_secret_key($secret_key, $type){
  //64个英文字符后接换行符"\n",最后再接换行符"\n"
  $key = (wordwrap($secret_key, 64, "\n", true))."\n";
  //添加pem格式头和尾
  if ($type == 'pub') {
    $pem_key = "-----BEGIN PUBLIC KEY-----\n" . $key . "-----END PUBLIC KEY-----\n";
  }else if ($type == 'pri') {
    $pem_key = "-----BEGIN RSA PRIVATE KEY-----\n" . $key . "-----END RSA PRIVATE KEY-----\n";
  }else{
    echo('公私钥类型非法');
    exit();
  }
  return $pem_key;
}

2. Unterschreiben

/**
 * RSA加签
 * @param $paramStr
 * @param $priKey
 * @return string
 */
public static function sign($paramStr, $priKey){
  $sign = '';
  //将字符串格式公私钥转为pem格式公私钥
  $priKeyPem = SignUtil::format_secret_key($priKey, 'pri');
  //转换为openssl密钥,必须是没有经过pkcs8转换的私钥
  $res = openssl_get_privatekey($priKeyPem);
  //调用openssl内置签名方法,生成签名$sign
  openssl_sign($paramStr, $sign, $res);
  //释放资源
  openssl_free_key($res);
  //base64编码签名
  $signBase64 = base64_encode($sign);
  //url编码签名
  $sign = urlencode($signBase64);
  return $sign;
}

3. Verifizierung

/**
 * RSA验签
 * @param $paramStr
 * @param $sign
 * @param $pubKey
 * @return bool
 */
public static function verify($paramStr, $sign, $pubKey) {
  //将字符串格式公私钥转为pem格式公私钥
  $pubKeyPem = SignUtil::format_secret_key($pubKey, 'pub');
  //转换为openssl密钥,必须是没有经过pkcs8转换的公钥
  $res = openssl_get_publickey($pubKeyPem);
  //url解码签名
  $signUrl = urldecode($sign);
  //base64解码签名
  $signBase64 = base64_decode($signUrl);
  //调用openssl内置方法验签,返回bool值
  $result = (bool)openssl_verify($paramStr, $signBase64, $res);
  //释放资源
  openssl_free_key($res);
  //返回资源是否成功
  return $result;
}

Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.


Verwandte Empfehlungen:

PHP-Methode zur Einschränkung des IP-Zugriffs_phpTipps

PHP7-Multithreading-Tutorial

PHPImplementierung zum Abrufen von Excel-Dateidaten

Das obige ist der detaillierte Inhalt vonBeispiel für das Andocken von PHP an Java zum Hinzufügen und Überprüfen von Signaturen im wirklichen Leben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn