小程序获取用户手机号服务器端代码(C#)

本文介绍了一种使用C#处理微信小程序加密数据的方法,通过调用微信API获取session_key,并利用AES-128-CBC模式解密用户数据。文章详细展示了从接收加密数据到返回解密结果的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<% @ webhandler language="C#" class="AverageHandler" %>
using System;
using System.Net;
using System.Web;
using System.Collections.Generic;  
using System.Text;  
using System.Security.Cryptography;  
using System.IO;
using LitJson;
 
 
public class AverageHandler : IHttpHandler
{
public bool IsReusable
{ get { return true; } }
 
public void ProcessRequest(HttpContext ctx)
{
    ctx.Response.ContentType = "application/json";
    HttpRequest Request = ctx.Request;
    string text = Request["encryptedData"];
    string IV = Request["iv"];
 
    //小程序appid和appsecret配置
    string appid = "小小星星亮晶晶";
    string secret = "小小星星亮晶晶";
 
    string code = Request["code"];//微信获取登录的口令
    Stream s_re = WebRequest.Create("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code").GetResponse().GetResponseStream();
    StreamReader sr = new StreamReader(s_re, Encoding.UTF8);
    string strLine = sr.ReadToEnd();
    sr.Close();
    try
    {
        JsonData jo = JsonMapper.ToObject(strLine);
        string Key = jo["session_key"].ToString();
        //string weixinID = jo["openid"].ToString();
        string str= AES_decrypt(text,Key,IV);
        ctx.Response.Write(str);
     }
        catch (Exception ex)
     {
         //return "";
 
     }
 
}
 
public string AES_decrypt(string encryptedDataStr, string key, string iv)  
        {  
            RijndaelManaged rijalg = new RijndaelManaged();  
            //-----------------    
            //设置 cipher 格式 AES-128-CBC    
 
            rijalg.KeySize = 128;  
 
            rijalg.Padding = PaddingMode.PKCS7;  
            rijalg.Mode = CipherMode.CBC;  
 
            rijalg.Key = Convert.FromBase64String(key);  
            rijalg.IV = Convert.FromBase64String(iv);  
 
 
            byte[] encryptedData= Convert.FromBase64String(encryptedDataStr);  
            //解密    
            ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);  
 
            string result;  
              
            using (MemoryStream msDecrypt = new MemoryStream(encryptedData))  
            {  
                using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))  
                {  
                    using (StreamReader srDecrypt = new StreamReader(csDecrypt))  
                    {  
 
                        result = srDecrypt.ReadToEnd();  
                    }  
                }  
            }  
 
            return result;  
        }
 
 
 
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值