美文网首页
javascript rsa 加密,实现RSA_PKCS1_PA

javascript rsa 加密,实现RSA_PKCS1_PA

作者: 学生黄哲 | 来源:发表于2022-11-08 12:00 被阅读0次
    import crypto from 'crypto';
    
    function rsaEncrypt(message: string) {  
      const publicKey = '-----BEGIN PUBLIC KEY-----****-----END PUBLIC KEY-----'   //your public key
      
      const buffer = Buffer.from(message, 'utf8');
      const encrypted = crypto.publicEncrypt({key:publicKey, padding : crypto.constants.RSA_PKCS1_PADDING}, buffer)
      return  encrypted.toString("base64");
      
    }
    

    RSA加密算法一次最多加密117字节数据(对会话密钥添加随机数),补充到128位,经过加密后得到一个长度为128字节的加密数据,故超过117位需要分段加密

    
    function rsaEncrypt(message: string) {
      const publicKey = '-----BEGIN PUBLIC KEY-----****'   //your public key
    
      const buffer = Buffer.from(message, 'utf8');
      const encrypted = crypto.publicEncrypt({ key: publicKey, padding: crypto.constants.RSA_PKCS1_PADDING }, buffer);
      return encrypted.toString('base64');
    }
    
    function rsaEncryptToLong(message: string) {
      const padding = 117;
      const count = message.length;
      const num = Math.floor(count / padding);
      const remainder = count % padding;
      let str = '';
      for (let i = 0; i < num; i++) {
        const value = message.slice(i * padding, i * padding + padding);
        str += rsaEncrypt(value);
        str += ';';
      }
      if (remainder !== 0) {
        const value = message.slice(-remainder);
        str += rsaEncrypt(value);
        str += ';';
      }
      if (str.length > 0) str = str.slice(0, str.length - 1);
      return str;
    }
    

    crypto node.js提供的加密方式,提供的加密常量有,详参文档

        namespace constants {
            // https://nodejs.org/dist/latest-v10.x/docs/api/crypto.html#crypto_crypto_constants
            const OPENSSL_VERSION_NUMBER: number;
    
            /** Applies multiple bug workarounds within OpenSSL. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html for detail. */
            const SSL_OP_ALL: number;
            /** Allows legacy insecure renegotiation between OpenSSL and unpatched clients or servers. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
            const SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
            /** Attempts to use the server's preferences instead of the client's when selecting a cipher. See https://www.openssl.org/docs/man1.0.2/ssl/SSL_CTX_set_options.html. */
            const SSL_OP_CIPHER_SERVER_PREFERENCE: number;
            /** Instructs OpenSSL to use Cisco's "speshul" version of DTLS_BAD_VER. */
            const SSL_OP_CISCO_ANYCONNECT: number;
            /** Instructs OpenSSL to turn on cookie exchange. */
            const SSL_OP_COOKIE_EXCHANGE: number;
            /** Instructs OpenSSL to add server-hello extension from an early version of the cryptopro draft. */
            const SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
            /** Instructs OpenSSL to disable a SSL 3.0/TLS 1.0 vulnerability workaround added in OpenSSL 0.9.6d. */
            const SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
            /** Instructs OpenSSL to always use the tmp_rsa key when performing RSA operations. */
            const SSL_OP_EPHEMERAL_RSA: number;
            /** Allows initial connection to servers that do not support RI. */
            const SSL_OP_LEGACY_SERVER_CONNECT: number;
            const SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
            const SSL_OP_MICROSOFT_SESS_ID_BUG: number;
            /** Instructs OpenSSL to disable the workaround for a man-in-the-middle protocol-version vulnerability in the SSL 2.0 server implementation. */
            const SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
            const SSL_OP_NETSCAPE_CA_DN_BUG: number;
            const SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
            const SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
            const SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
            /** Instructs OpenSSL to disable support for SSL/TLS compression. */
            const SSL_OP_NO_COMPRESSION: number;
            const SSL_OP_NO_QUERY_MTU: number;
            /** Instructs OpenSSL to always start a new session when performing renegotiation. */
            const SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
            const SSL_OP_NO_SSLv2: number;
            const SSL_OP_NO_SSLv3: number;
            const SSL_OP_NO_TICKET: number;
            const SSL_OP_NO_TLSv1: number;
            const SSL_OP_NO_TLSv1_1: number;
            const SSL_OP_NO_TLSv1_2: number;
            const SSL_OP_PKCS1_CHECK_1: number;
            const SSL_OP_PKCS1_CHECK_2: number;
            /** Instructs OpenSSL to always create a new key when using temporary/ephemeral DH parameters. */
            const SSL_OP_SINGLE_DH_USE: number;
            /** Instructs OpenSSL to always create a new key when using temporary/ephemeral ECDH parameters. */
            const SSL_OP_SINGLE_ECDH_USE: number;
            const SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
            const SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
            const SSL_OP_TLS_BLOCK_PADDING_BUG: number;
            const SSL_OP_TLS_D5_BUG: number;
            /** Instructs OpenSSL to disable version rollback attack detection. */
            const SSL_OP_TLS_ROLLBACK_BUG: number;
    
            const ENGINE_METHOD_RSA: number;
            const ENGINE_METHOD_DSA: number;
            const ENGINE_METHOD_DH: number;
            const ENGINE_METHOD_RAND: number;
            const ENGINE_METHOD_EC: number;
            const ENGINE_METHOD_CIPHERS: number;
            const ENGINE_METHOD_DIGESTS: number;
            const ENGINE_METHOD_PKEY_METHS: number;
            const ENGINE_METHOD_PKEY_ASN1_METHS: number;
            const ENGINE_METHOD_ALL: number;
            const ENGINE_METHOD_NONE: number;
    
            const DH_CHECK_P_NOT_SAFE_PRIME: number;
            const DH_CHECK_P_NOT_PRIME: number;
            const DH_UNABLE_TO_CHECK_GENERATOR: number;
            const DH_NOT_SUITABLE_GENERATOR: number;
    
            const ALPN_ENABLED: number;
    
            const RSA_PKCS1_PADDING: number;
            const RSA_SSLV23_PADDING: number;
            const RSA_NO_PADDING: number;
            const RSA_PKCS1_OAEP_PADDING: number;
            const RSA_X931_PADDING: number;
            const RSA_PKCS1_PSS_PADDING: number;
            /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the digest size when signing or verifying. */
            const RSA_PSS_SALTLEN_DIGEST: number;
            /** Sets the salt length for RSA_PKCS1_PSS_PADDING to the maximum permissible value when signing data. */
            const RSA_PSS_SALTLEN_MAX_SIGN: number;
            /** Causes the salt length for RSA_PKCS1_PSS_PADDING to be determined automatically when verifying a signature. */
            const RSA_PSS_SALTLEN_AUTO: number;
    
            const POINT_CONVERSION_COMPRESSED: number;
            const POINT_CONVERSION_UNCOMPRESSED: number;
            const POINT_CONVERSION_HYBRID: number;
    
            /** Specifies the built-in default cipher list used by Node.js (colon-separated values). */
            const defaultCoreCipherList: string;
            /** Specifies the active default cipher list used by the current Node.js process  (colon-separated values). */
            const defaultCipherList: string;
        }
    

    相关文章

      网友评论

          本文标题:javascript rsa 加密,实现RSA_PKCS1_PA

          本文链接:https://www.haomeiwen.com/subject/xlewtdtx.html