使用公钥字符串在PHP

时间:2017-12-28 22:50:31

标签: php encryption public-key-encryption

我有公钥字符串:

----- BEGIN PUBLIC KEY ----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvL + UegLeWJ1KLh6WEfbW KGCA + vj4G / k6iIz9OWCb9t3maokH +盎司/ bNB8PGlwmH2aCBmqXPv9p3hexcujUsNC jFahCAz84tT7M4rR2GGwVWyY9PJ98rZbbvD9PLG380cqZs + vlwYT16bv5t + braiJ WhrAgwKF0eZyID6DzRnDCG7HbKr6sL1h7QD1WHBljplV + TinIeWoyBIWPJdqEAUs js1wXWkFPIb5x0W7kAzWc0 + oH3gDD3kGv + T / p2DsbUuOYYSZgZB8Lx1AKiWVRERt 90tWH9uytulSxvwoONBriasH7VlSXyi5ve6AA4 + FG / HExiPNN5Lh34kNP6l5CTc + yaCDHewYQeqDdgP + GurgdV9ZCM4P7c6Ky7GZBs8sAAAXevch8ggf9XGjEsLl ++ C7 G5E4FO6kNmloL3nogRLJ8P8w / s53Y0g4ih2hdJFfqJ3l / fIolvldR17nA3oZBHTo OuOSR / JK1KWvkl / C9I1lHO70zrgvr7wtpW2YbdBHvvTu5aTK8oIMNoZ8lhWdKFYG aiQWvfsM / IPXbFKQbDQachn5ZHYLc4wXi1uBHYnPCjZM3Fq6wc1oSnRZ77CI8crf To7TJFfXO20VtSdwUq0SCrQ1wxttK8uH22c / YUXPld + K6fW13tspWz653gnw5FPd 8bFQQByVkrcihbyuXWjUSMkCAwEAAQ == ----- END PUBLIC KEY -----

并希望用它来加密邮件,但是当我运行下面的代码时,它会给我以下错误:

警告:openssl_public_encrypt():key参数不是有效的公钥i ...

<?php 

$unformatted_pub= "-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvL+UegLeWJ1KLh6WEfbW kGcA+vj4G/k6iIz9OWCb9t3maokH+Oz/bNB8PGlwmH2aCBmqXPv9p3hexcujUsNC jFahCAz84tT7M4rR2GGwVWyY9PJ98rZbbvD9PLG380cqZs+vlwYT16bv5t+braiJ WhrAgwKF0eZyID6DzRnDCG7HbKr6sL1h7QD1WHBljplV+TinIeWoyBIWPJdqEAUs js1wXWkFPIb5x0W7kAzWc0+oH3gDD3kGv+t/p2DsbUuOYYSZgZB8Lx1AKiWVRERt 90tWH9uytulSxvwoONBriasH7VlSXyi5ve6AA4+FG/HExiPNN5Lh34kNP6l5CTc+ yaCDHewYQeqDdgP+GurgdV9ZCM4P7c6Ky7GZBs8sAAAXevch8ggf9XGjEsLl++c7 G5E4FO6kNmloL3nogRLJ8P8w/s53Y0g4ih2hdJFfqJ3l/fIolvldR17nA3oZBHTo OuOSR/JK1KWvkl/C9I1lHO70zrgvr7wtpW2YbdBHvvTu5aTK8oIMNoZ8lhWdKFYG aiQWvfsM/IPXbFKQbDQachn5ZHYLc4wXi1uBHYnPCjZM3Fq6wc1oSnRZ77CI8crf To7TJFfXO20VtSdwUq0SCrQ1wxttK8uH22c/YUXPld+K6fW13tspWz653gnw5FPd 8bFQQByVkrcihbyuXWjUSMkCAwEAAQ== -----END PUBLIC KEY-----";

$unformatted_priv = "-----BEGIN PRIVATE KEY----- MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDFrm2aDzAp2SEx b89HeyPrkq0mBfA7o4BNhUAC9pO0JcGZdDHJyE1cN8ZwK4H0sYKYUllZDvVlx6rQ MpoD9UJsbvlhc+xJtNFFqqxdVCqy/1hh9QXZ6xXAbGDKNuEoueD7/9IlDbJGE+y6 4RVxuhe38Ed5S6ZHCdgmuJ5OPs4GE45huskXNxh2mhBQ4BgNV5wKSsULz+ApdE+j 3s+1L3gOuZB/Rby3Qn3mbhYovpF+fFGUqL6jtNaytv5zAi8595FSaayP/l9perBm ODniNok/ZqzVPuF/K04GZtIhPZjW7SDjypJDXJYH7kjeMCrmyemi/FeP+kKSNDqm Hmwm7tFbgSVhjqMq6m5nIGMFUByNhsejt++ygVAc9hOEN0q2AShsDd5pXRieU40P TyFDfv4Cd7uXX1lDtyTgMk5XryyLddjBcxjaJznILTmtsp7ynEXC6KkPA1n85elp RlZUmt7tFQ7KjLWI/b+M69FfBx6Hh+WsEUE+VsjOcp0iJJBkzCuIO60cF2H379US O5dVYd4ZcVW+8Y/GjFswl9TexuPXEWiDsRR7QTI2ZQW8ueCKxHGU8MjN+q+9stTE azTAQwAFnntGP/jflIiTXnnmW+bLuvB0FGuacRHu0pdZ8Q4K6pW349L9WT49UkmA 2AQ6qSCZog0uBsepd/K5tVxrDlyJFwIDAQABAoICADimVPhqU9YaSD3fmdoVOuT+ gqo7121v3IvanM58lTVyAHoWZ1I5GZpMzYxFm5dg61j1eG9iLwb84kGJzsNFnMRw RP0deGBi9fnuADk6roXfURe5XPTnPrOHG3G3qmy+X/A3jqRZuXYFrbicWkXeG3/1 1rW27S68bnoiPBOWQfpRzmLJYWlKu7L5UaWropjoO2pjpPZOmyGmGFCQwJtewBwQ J42hkYQ/BM9tSuJgQleqDsL4XLGTWFecw2x3+sq03KtuZypYrkUPCNAyWrwt/sTx iqQNwhdsdI63Fo66FTu6dstwuNufA8vACJfL2++Je2/eusUi5cL6PrhuTXYWyF3c T8yA5+A1oS+sXQRQzMWP5Jsu7PDKWTSnB294zVVLw3v1x4T/qkJ1Kd5VNZVQqlFf hi7FqxC+CMvyULfK4g+6p5CY87QwgkuxrYN27+jQNFNTpkcb2LrrPRz/ogw7KHm1 rpvnHnhHWmrYOecxDBXqFO34zsLbVHuLH+lFvIsupgtIKT/FtZ2XYOQPvnTqiK6a AKNAnV8wFKK6pdD1O3JmNMpBbCvfm4fKhJ+Wumu0tyY/qE8ay95gJkf8mDal3CVa xMMqXVEbxXZGDrhYXHpjZqPr0eKkh9f1QoiPxaRXfEIAhvggpdd5SYzUPvI5zZIS eqGx125kP/eDQR+n1TtJAoIBAQD0q2rbNBmdLBH9D1eva0NsJlswrVOm+YRIAshN +89wvAN/2YKS78tPXl9snjnviAOAHNVL4yNpemWmxipVg5C6SOYMETN8Xo/UGzE0 yfLReO2ndukyX63CaUaiZMDz++ARuyW7GpWPj6xrmt1j2chpvFFilbORreXNlzSe AwVL7jLwSGp84CF2Pgb+Mm9yap+DRr8k6C99LN/6xYJbajzqIu6e6PtFSxx01fce 6JD0AdSfc9q3KZ65B8uw3WGQXRGXcoUPnsc/HA9leZJlhBTGzDShSIogqbC89vKK YE8ux3PK+T12m6DFkvITsaqIHE2o70843DEFNZcJLE4k9r/lAoIBAQDO1fXfmylh aeYNmoWYt6LwxH2ZdGZAHpZjA1QAJHd1TRoskOgOCY22KztQLDqyLv4cVX0QuU6J pdE1R+SRNSL2BTp4YLZ2bPixUjaWL2br1tupVy+WgPwPNC5oQPbhnMWxy+15gR14 X5UBNF/SCDL2s9enLUHfBrkpB/6KqFl5N3WRxolaNJaE85dNHfRbW6JZesm/+DER SE+5QTNZfY9jyjseUqFCgTgktswPwdeO41PHPofkfYgANjoMYeA+b9I5aXrMNqmD nGLiNe6yuYhaBI1GfDBvq2wLzkKl9rKLcvlSSokUwY1BD9Z7NcE0CNZoJMBjOtbm fJVN+hFr6f1LAoIBAQCC8hc/eDPZNZPvDz4LqWmtQR3/AFTMAbC1ZZ/UdNeB624o B75la6cxND34APra4r2U3FmfwtHaCuLKjjZsC/zyZj+Q58fZYTay+1arfQXS7Fit DuwhxKlXakaedTP7oKs8ch/wcnrnGara8Ehav10OkfYwwBQZ/KsIDEvh4ZX9HF/w z6EGcmIWSX4un8mbv8rdVIjKdOWtpc2+BeUNjd9KJCX3sJOCc3+oXDdlOG0T2sL0 D+pXqxPCzZRLdUBZJiZbGrRyNrVGZnsrARTD9hu0hegJBay/bHIlwDjwrDjUvXSQ hjJJ/2LdOxcKSUUOka9SobmRoe8ubY8HHso36EOtAoIBAQCr+KXX5xB+2CfZA7M0 iOrHOPgdEPS7NzNe27OJ8sgIFbU/fLQUh8j1v/gu7rdW00+gi0vTDd/I/r91h3L5 cK7C0xIMaI0M5gnYlTyhnoP6bshwgfclMdVhZsd3Exyx9UFCVQX70miIXyBqwfsx jHOjP2B8tVphbxugi+8Npm/OI1hzfhlRkQvdOxN/oPo8w3G26Cq6nEdf0TnIE/f3 3jfMhqakzZsayom9rOb56veo7EYKEWm3hs//LRcSmIZ0I1EtPxBEnuZOcUaeQq1W mIBQKBy2kCdNkb/iCPrNNtK4sz2tOB/FzC//+oUgKE+dTgPGz1fOqWtodAlHrjWx /fkFAoIBADk3d8FxNXgpv8imDzUTg3ONN9sbzqHjb9/6HKAYpN4Ez535Kr9rIJ1U D+z4VC7X5Gd5GrikoqsikotNEMJmYR/5Z0ojbZPdcaLWsIWXiAQksQOCodloQ+6+ QkJ2U8Be9y41F2psiq4s0E326rufobj3NSyk+5LYizrjdB/S7CeuehQnq7nA99A6 7uvmD4Kmh+EfDggS7sKQoIS9nLzraGpdjokFk56vtKH0TbUlrgoMTdUuNUBRSD8R O0KT1VLB4wrlMAuVQ+wKs/dOFRwHIMNl2EaBoXCkYE4sjl9776r1kIUJ/ZDt7+FZ H6CKoxjdh97Zzxo1Up2PTOOpcXfE6GA= -----END PRIVATE KEY-----";

$data = 'plaintext data goes here';

// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $unformatted_pub);

// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt($encrypted, $decrypted, $unformatted_priv);

echo $decrypted;

//echo $pubKey;


?>

我不确定如何正确编码公钥,我们非常感谢所有的帮助。

1 个答案:

答案 0 :(得分:3)

以下代码生成密钥,一切都按预期工作,但您的硬编码是一个公钥,它不会对生成的私钥起作用:

<?php     
$config = array(
    "digest_alg" => "sha512",
    "private_key_bits" => 4096,
    "private_key_type" => OPENSSL_KEYTYPE_RSA,
);

// Create the private and public key
$res = openssl_pkey_new($config);

// Extract the private key from $res to $privKey
openssl_pkey_export($res, $privKey);

// Extract the public key from $res to $pubKey
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];

$data = 'plaintext data goes here';

// Encrypt the data to $encrypted using the public key
openssl_public_encrypt($data, $encrypted, $pubKey);

// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt($encrypted, $decrypted, $privKey);

echo $decrypted;
?>

相反,您应该执行以下操作 test ,生成密钥然后硬编码:

<?php  
$pubKey = '
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvucXbUOp6VBweTvmJQeS
S//VlWbqDmoxLB9Ru5OWWqU+hDbYNcusc92W08rqrlJkaQRyhUn30vF7nqrQKBPf
hj9sX5s5AqPkGH7Ygvl7zjNTRY4PTGnaxgJs5PJgiGqusdmT6OMv6IwBUuk463ao
YzYIyLOmzmi/nKi0DkAw5B1NHIXtb9XMrb8vBskit+gbjKuXet2kXslKkNZncUUS
/AbchHZDaw192n0s6yhOJCe4nzvrPoO/1BnqLjaQbkMwoKXhwoAxByyiUVNpVtN9
cykZl9TM2mjYPFDXnNBkiV5HURJP64EVoXu69qPCORtOxvTQ3Jhz7Z2brtEQFtxg
vfQnm4FuiYnVXSwLte3IC+cEDbn3++x3CuHPIe4ioQwR/VxnzY7uvZASh4qPG4Re
hWbQgU+i5MIqwnTW/IA8XreD/kzgmYk+qXWHUxAZpTHfHxUGUGZZDhYGPpdhYi6L
Cw45FZXDjvLRB3bYOUw9M8s4V7uMEFSg5cZdr7smCzhsF3WNysumlCEK/FEHmszW
yDnYqZMwbgkEb4m6hxsxzEpo41LrxSnAVO3OWLsS9Llf3J63xN8IaW7e3vpif1+n
I4TU2efSyy+v9AHuHGIOyIOI7fQjWNYORtsQGNp5OZaekvStHyu5qDPrISiY90Ty
qihrmpm2PtYASEc1/MDlFY8CAwEAAQ==
-----END PUBLIC KEY-----';

$privKey = '-----BEGIN PRIVATE KEY-----
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
CHeWpc4RMhl4p+nE9KOEzcDS5RD1SA==
-----END PRIVATE KEY-----';

$encrypted = 'jZMLeJDYdtJI/PZJlDkTc7G4+BzhMhVDf+/S2FJg+AcyRGWz9D3C2l7hrK+IV2DZEYXfSnUibHddMZ+PoGbvWXUoa3geyKPi7ATmaI+ugiZpBJ5wBFi2wdN3N2WbInZ96xr5kjimA1wzLYNh9ig3yM4Mj+imD8o3eF4qAWrpcojgN7Lio/E5BeLSiilSpAY3z2ZTWJfB6g5JOo/h5kIbS1qKRCf1VYCtCqSQf7M7+421M3VKYdt9vBa2/53vzgkCrKEw4kPiBUFzuAPNcwa+cc6j3IsyRzZ6ownabBbYkrPHxzAlNDKABPxbU8v+8yJXtE1kEwAbr62AmJVLXuvdaX9St8gTYfCMxnP9VAWZ8Y4K5dwuG/6wTz/fDFTK2MgRd6WErAuj5mdLjMa8Yc5/Wt0Yut0grtdarNq3m5Z0Quhir99L0xHAmuKtNztPJC1wnEbHFfZ4kRjxG53SE19baeBpLNC0erfoWF3aQt1aJHqw2xbLdV8CnKMaVAw1qjdRu4WFml/EVokgTHDqm4SGlgwdhXtWY/T+p1zhu7gOl2PuArPyPGpYNh57Ib7TlwjvaHOO73O5xQqm+YUElh7MjwvH45jTekbWZHjc2fyN7pXtdnus+WOjKhopL09LPy4M17DARUSedypSiZL3gTiIz6qqJ31XQIsEaKWOMosYOjY=';

// Decrypt the data using the private key and store the results in $decrypted
openssl_private_decrypt(base64_decode($encrypted), $decrypted, $privKey);

echo $decrypted;
?>

将输出plaintext data goes here