36866386 发表于 2010-8-3 22:53:38

不错 不错

pzq1978 发表于 2010-8-4 00:47:50

看看

漫天 发表于 2010-8-4 00:51:06

高级模式 | 发新话题

374584067 发表于 2010-8-19 04:51:49

han han

ccxxzz 发表于 2010-8-19 05:20:49

本帖最后由 ccxxzz 于 2010-8-19 05:28 编辑

C#代码有现成的:
using System;
using System.Security.Cryptography;
using System.Collections.Generic;

namespace System.Net.Radius
{

    class Utils
    {
      static public byte[] makeRFC2865RequestAuthenticator(string sharedSecret)
      {
            byte[] sharedS = System.Text.Encoding.ASCII.GetBytes(sharedSecret);
            byte[] requestAuthenticator = new byte;
            Random r = new Random();
            for (int i = 0; i < 16; i++)
                requestAuthenticator = (byte)r.Next();
            Array.Copy(sharedS, 0, requestAuthenticator, 16, sharedS.Length);
            MD5 md5 = new MD5CryptoServiceProvider();
            md5.ComputeHash(requestAuthenticator);
            return md5.Hash;
      }
      
      static public byte[] makeRFC2865ResponseAuthenticator(byte[] data, byte[] requestAuthenticator, string sharedSecret)
      {
            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] ssArray = System.Text.Encoding.ASCII.GetBytes(sharedSecret);
            byte[] sum = new byte;
            Array.Copy(data, 0, sum, 0, data.Length);
            Array.Copy(requestAuthenticator, 0, sum, 4, 16);
            Array.Copy(ssArray, 0, sum, data.Length, ssArray.Length);
            md5.ComputeHash(sum);
            return md5.Hash;
      }

      static public byte[] encodePapPassword(byte[] userPass, byte[] requestAuthenticator, string sharedSecret)
      {

            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

            byte[] userPassBytes = null;
            if (userPass.Length > 128)
            {
                userPassBytes = new byte;
                System.Array.Copy(userPass, 0, userPassBytes, 0, 128);
            }
            else
            {
                userPassBytes = userPass;
            }
            byte[] encryptedPass = null;

            if (userPassBytes.Length < 128)
            {
                if (userPassBytes.Length % 16 == 0)
                {
                  encryptedPass = new byte;
                }
                else
                {
                  encryptedPass = new byte[((userPassBytes.Length / 16) * 16) + 16];
                }
            }
            else
            {
                encryptedPass = new byte;
            }
            System.Array.Copy(userPassBytes, 0, encryptedPass, 0, userPassBytes.Length);
            for (int i = userPassBytes.Length; i < encryptedPass.Length; i++)
            {
                encryptedPass = 0;
            }
            byte[] ssArray = System.Text.Encoding.ASCII.GetBytes(sharedSecret);
            byte[] sum = new byte;
            Array.Copy(ssArray, 0, sum, 0, ssArray.Length);
            Array.Copy(requestAuthenticator, 0, sum, ssArray.Length, requestAuthenticator.Length);
            md5.ComputeHash(sum);
            byte[] bn = md5.Hash;

            for (int i = 0; i < 16; i++)
            {
                encryptedPass = (byte)(bn ^ encryptedPass);
            }
            // encryptedPass.Length > 16

            return encryptedPass;
      }
    }
}
调用的时候大家注意调用方法!
直接复制,在VS2008中做成DLL.方法:点 新建项目类库, 2、点项目、生成,生成release;3、点生成、培植管理、RELEASE DLL,4、DLL就生成了,然后利用DLL。就可做这样的RADIUS!

stonemoon 发表于 2010-8-19 11:45:25

强烈支持。想拜师教下我可以吗。我现在就是弄数据包弄不明白。其他都可以

caixue 发表于 2010-8-19 18:00:14

不错,这玩意好,

addminlinux 发表于 2010-8-19 22:07:56

还有重量级的,在管理3000用户的

gddsam 发表于 2010-8-20 00:35:23

看看啊

liu666 发表于 2010-8-20 02:26:57

ding顶

qdcv123 发表于 2010-8-20 02:35:39

强人啊 这么牛啊@

assaqw 发表于 2010-8-21 02:02:42

看看。。。。

gdlaoqiang 发表于 2010-8-21 10:51:32

的风格地方撒地方

日照无线 发表于 2010-8-22 17:00:48

看看

kaile 发表于 2010-8-25 17:04:08

研究下看看有没有测试版本
页: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
查看完整版本: 在做的pppoe帐号管理系统-api对接