微信号:ruby_and_rails

介绍:[Ruby程序员]旨在分享最新的Ruby & Rails,移动开发以及其他相关技术的分享,内容通俗易懂,有来自北京,上海,广州的技术达人不定期的分享.

Ruby&Java&PHP-RSA加密算法实战

2016-12-14 10:53 michael


RSA的概念自行百度,直入主题:


Linux用户(以Ubuntu为例)

#进入OpenSSL程序

$ openssl

#生成私钥

OpenSSL> genrsa -out rsa_private_key.pem 1024 

#Java开发者需要将私钥转换成PKCS8格式

OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt 

#生成公钥

OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 

#退出OpenSSL程序

OpenSSL> exit 


PHP

#算签名

    public function rsa_sign($data, $rsaPrivateKey) {

        $res = openssl_get_privatekey ($rsaPrivateKey);

        openssl_sign ( $data, $sign, $res );

        openssl_free_key ( $res );

        $sign = base64_encode ( $sign );

        return $sign;

    }

#获得签名

    public function sign_request($params) {

        return $this -> rsa_sign ( $this -> $params , $this -> rsaPrivateKey );

    }


Ruby


require 'openssl'

require 'base64'

require 'httparty'

rsa = OpenSSL::PKey::RSA.new(File.read("/path/rsa_private_key.pem”))

str = “hello"

sign = Base64::strict_encode64(rsa.sign('sha1’,str))


Java


pom配置:

<dependency>

    <groupId>com.sun.xml.security</groupId>

    <artifactId>xml-security-impl</artifactId>

    <version>1.0</version>

</dependency>


import com.sun.org.apache.xml.internal.security.utils.Base64;

import java.io.*;

import java.security.*;

import java.security.spec.InvalidKeySpecException;

import java.security.spec.PKCS8EncodedKeySpec;


public class RSAEncrypt {

    public static String encrypt(String content, String privateKey){

        String encryptString = null;

        try {

            PKCS8EncodedKeySpec priPKCS8  = new PKCS8EncodedKeySpec(Base64.decode(privateKey));

            KeyFactory factory = KeyFactory.getInstance("RSA");

            PrivateKey priKey = factory.generatePrivate(priPKCS8);

            Signature signer = Signature.getInstance("SHA1WithRSA");

            signer.initSign(priKey);

            signer.update(content.getBytes("utf-8"));

            encryptString = Base64.encode(signer.sign());

        }catch (NoSuchAlgorithmException e) {

            e.printStackTrace();

        }catch (InvalidKeySpecException e) {

            e.printStackTrace();

        }catch (InvalidKeyException e) {

            e.printStackTrace();

        }catch (SignatureException e) {

            e.printStackTrace();

        }catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        }catch (Exception e) {

            e.printStackTrace();

        }

        return encryptString;

    }

}

String str = “hello”;

String res = RSAEncrypt.encrypt(str, privateKey);



 
ruby程序员 更多文章 Ruby&Java&PHP-RSA加密算法实战 MySQL索引实战+优化 使用 Ruby 处理大型 CSV 文件 使用&nbsp;Ruby&nbsp;处理大型&nbsp;CSV&nbsp;文件 生活中的Paxos,原来你我都在使用
猜您喜欢 手把手教你用django搭建博客(一) 以 CephFS 为例解析如何在云中提供 NAS 服务 phptrace 正式版发布啦! 浅谈 HTTPS 和 SSL/TLS 协议的背景与基础 Ceph管理节点故障mds迁移到存储节点