MD5源代码未输出正确的值

时间:2015-11-29 23:27:38

标签: c hash cryptography md5 cryptographic-hash-function

我正在尝试在我的linux机器上运行md5源代码。我从这里得到了代码:https://tools.ietf.org/html/rfc1321

在链接的底部,它声称MD5测试套件的输出应该如下:

MD5 test suite:
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
MD5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") =
d174ab98d277d9f5a5611c2c9f419d9f
MD5 ("123456789012345678901234567890123456789012345678901234567890123456
78901234567890") = 57edf4a22be3c955ac49da2e2107b67a

在我的md5文件夹中,我有以下内容:

global.h
md5c.c
md5.h
mddriver.c

当我第一次尝试编译时,它在mddriver.c中抛出一个错误,说'第20行MD5未定义'(或类似的东西),所以我将第20行从'#define MD MD5'改为'#define MD 5' 。考虑到代码的其余部分,这种方法很有意义。

我在MD5文件夹中使用以下代码编译:

gcc -Wall *.c -o out

这创建了我可以使用

运行的文件'out'
./out -x

其中参数'-x'用于运行测试套件。但是,我得到'./out -x'的以下输出:

MD5 test suite:
MD5 ("") = e4c23762ed2823a27e62a64b95c024e7
MD5 ("a") = 793a9bc07e209b286fa416d6ee29a85d
MD5 ("abc") = 7999dc75e8da648c6727e137c5b77803
MD5 ("message digest") = 840793371ec58a6cc84896a5153095de
MD5 ("abcdefghijklmnopqrstuvwxyz") = 98ef94f1f01ac7b91918c6747fdebd96
MD5 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") = dabcd637cde443764c4f8aa099cf23be
MD5 ("12345678901234567890123456789012345678901234567890123456789012345678901234567890") = e29c01a1e2a663c26b4a68bf7ec42df7

显然不一样。我错过了什么吗?如果您希望我重新创建'MD5 not declared'错误,请告诉我。感谢。

2 个答案:

答案 0 :(得分:2)

MD5是一种旧算法,RFC中的源代码可能不是用64位机器编写的。因此,代码可能在不同的处理器体系结构上失败。

为了在64位机器上编译,您需要将-m32标志传递给gcc。在linux上,您可能还需要安装libc6-dev-i386软件包。

答案 1 :(得分:1)

global.h 具有:

>>>>>>>>main.dart starts from here<<<<<<

void main() => runApp(MyApp());


class MyApp extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
   return MultiProvider(
     providers: [
       ChangeNotifierProvider.value(
         value: DefaultContentProvider(),
       ),
     ],
        child: MaterialApp(
       title: 'My Flutter App',
      //  home: HomePage(),
       routes: {
         '/': (context) => HomePage(),
       },
     ),
   );
 }
}

>>>>>>>>HomePage starts from here <<<<<<<<

class HomePage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _HomePageState();
  }
}

class _HomePageState extends State<HomePage>
    with SingleTickerProviderStateMixin {
  int _currentIndex = 0;
  TabController _tabController;

  @override
  void initState() {
    super.initState();
    _tabController = TabController(
      // initialIndex: 2,
      vsync: this,
      length: 3,
    );
  }

  @override
  void dispose() {
    _tabController.dispose();
    super.dispose();
  }

  void onBottomTabTapped(int index) {
    setState(() {
      _currentIndex = index;
      _tabController.index = 0;
    });
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 3,
      child: Scaffold(
        appBar: AppBar(
          title: Text('My Flutter App'),
        ),
        drawer: AppDrawer(),
        body: Column(
          children: <Widget>[
            Container(
              decoration: BoxDecoration(color: Colors.cyanAccent),
              child: TabBar(
                labelColor: Colors.black,
                controller: _tabController,
                tabs: buildTabBar(_currentIndex),
                onTap: (i) {
                  print(i);
                },
              ),
            ),
            Expanded(
              child: TabBarView(
                controller: _tabController,
                children: buildTabBody(_currentIndex),
              ),
            ),
          ],
        ),
        bottomNavigationBar: BottomNavigationBar(
          onTap: onBottomTabTapped,
          currentIndex: _currentIndex,
          items: [
            BottomNavigationBarItem(
                icon: Icon(Icons.home), title: Text('Home')),
            BottomNavigationBarItem(
              icon: Icon(Icons.mail),
              title: Text('Messages'),
            ),
            BottomNavigationBarItem(
              icon: Icon(Icons.person),
              title: Text('Profile'),
            )
          ],
        ),
      ),

    );
  }
}

>>>>>>>buildTabBar and TabBody starts from here<<<<<

buildTabBar(index) {
  switch (index) {
    case 0:
      return <Tab>[
        Tab(text: 'Test'),
        Tab(icon: Icon(Icons.directions_car)),
        Tab(icon: Icon(Icons.directions_transit)),
      ];

buildTabBody(index) {
  switch (index) {
    case 0:
      return [
        FirstTab(),
        _children[1],
        _children[2],
      ];


>>>>>>FirstTab code starts from here<<<<<

class FirstTab extends StatefulWidget {
  @override
  _FirstTabState createState() => _FirstTabState();
}

class _FirstTabState extends State<FirstTab> {
  ScrollController _scrollController = ScrollController();

  @override
  void initState() {
    _scrollController.addListener(() {
      if (_scrollController.position.pixels ==
          _scrollController.position.maxScrollExtent) {
        getMoreData();
      }
    });
    super.initState();
  }

  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

  Future<void> getMoreData() {
    return Provider.of<DefaultContentProvider>(context, listen: false)
        .fetchAndSetItems();
  }

  Future<void> refreshData() {
    Provider.of<DefaultContentProvider>(context, listen: false).clearAllData();
    return Provider.of<DefaultContentProvider>(context, listen: false)
        .fetchAndSetItems();
  }

  @override
  Widget build(BuildContext context) {
    return RefreshIndicator(
      onRefresh: refreshData,
          child: CustomScrollView(
        // physics: const AlwaysScrollableScrollPhysics(),
        controller: _scrollController,
        slivers: <Widget>[
          SliverList(
            delegate: SliverChildListDelegate([
              CaraouselItems(),
            ]),
          ),
          SliverList(
              delegate: SliverChildListDelegate([
            ContentList(),
          ]))
        ],
      ),
    );
  }
}


>>>>>>> CarouselItems code<<<<<<


class CaraouselItems extends StatefulWidget {
  @override
  _CaraouselItemsState createState() => _CaraouselItemsState();
}

class _CaraouselItemsState extends State<CaraouselItems> {
  int _currentIndex = 0;
  List imgList = [
    'https://images.pexels.com/photos/3667816/pexels-photo-3667816.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
    'https://images.pexels.com/photos/3807512/pexels-photo-3807512.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
    'https://images.pexels.com/photos/3690052/pexels-photo-3690052.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
    'https://images.pexels.com/photos/3617496/pexels-photo-3617496.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
    'https://images.pexels.com/photos/3639542/pexels-photo-3639542.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
  ];
  List<T> map<T>(List list, Function handler) {
    List<T> result = [];
    for (var i = 0; i < list.length; i++) {
      result.add(handler(i, list[i]));
    }
    return result;
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        CarouselSlider(
          height: 200.0,
          initialPage: 0,
          enlargeCenterPage: true,
          // autoPlay: true,
          enableInfiniteScroll: true,
          autoPlayInterval: Duration(seconds: 4),
          autoPlayAnimationDuration: Duration(milliseconds: 2000),
          pauseAutoPlayOnTouch: Duration(seconds: 6),
          onPageChanged: (index) {
            setState(() {
              _currentIndex = index;
            });
          },
          items: imgList
              .map((imgUrl) => Builder(builder: (BuildContext context) {
                    return Container(
                      width: double.infinity,
                      margin:
                          EdgeInsets.symmetric(horizontal: 5, vertical: 10),
                      decoration: BoxDecoration(
                        color: Colors.grey,
                      ),
                      child: Image.network(imgUrl, fit: BoxFit.cover),
                    );
                  }))
              .toList(),
        ),
        SizedBox(height: 5),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: map<Widget>(imgList, (index, url) {
            return Container(
              width: 10,
              height: 10,
              margin: EdgeInsets.symmetric(vertical: 10, horizontal: 2),
              decoration: BoxDecoration(
                  shape: BoxShape.circle,
                  color: _currentIndex == index ? Colors.blue : Colors.grey),
            );
          }),
        ),
      ],
    );
  }
}

>>>>> ContentList class <<<<

class ContentList extends StatefulWidget {
  @override
  _ContentListState createState() => _ContentListState();
}

class _ContentListState extends State<ContentList> {
  ScrollController _scrollController = ScrollController();



  @override
  void dispose() {
    _scrollController.dispose();
    super.dispose();
  }

@override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: Provider.of<DefaultContentProvider>(context, listen: false)
          .fetchAndSetItems(),
      builder: (context, AsyncSnapshot snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CircularProgressIndicator());
        } else {
          if (snapshot.error != null) {
            print(snapshot.error);
            return Center(
              child: Text('An error occured'),
            );
          } else {
            return Consumer<DefaultContentProvider>(
              builder: (context, contentData, child) => ListView.builder(
                shrinkWrap: true,
                controller: _scrollController,
itemCount: contentData.lazyItem.length + 1,
                itemBuilder: (context, index) {
                  if (index < contentData.lazyItem.length) {
                    return CardItem(
                      id: contentData.lazyItem[index].id,
                      title: contentData.lazyItem[index].title,
                      imageUrl: contentData.lazyItem[index].imageUrl,
                      contentLength: contentData.items.length,
                    );
                  } else if (index < contentData.items.length) {
                    // return _buildProgressIndicator();
                    return Padding(
                      padding: EdgeInsets.symmetric(vertical: 32),
                      child: Center(
                        child: Text('Loading more content'),
                      ),
                    );
                  } else {
                    return Padding(
                      padding: EdgeInsets.symmetric(vertical: 32),
                      child: Center(
                        child: Text('No more content to display'),
                      ),
                    );
                  }
                },
              ),
            );
          }
        }
      },
    );
  }



 }




>>>>>> ProviderClass<<<<<<

class DefaultContentProvider extends ChangeNotifier {
  List _items = [];
  List<CardItem> lazyItem = [];
  int lazyItemIndex = 0;

  List<CardItem> get items {
    return [..._items];
  }

  List<CardItem> fetchTenItems() {
    if (lazyItemIndex >= items.length - 1) return [];
    var i;
    for (i = 0; i < 10; i++) {
      lazyItem.add(items[lazyItemIndex + i]);
    }
    lazyItemIndex += i;
    return lazyItem;
  }

  void clearAllData() {
    _items = [];
    lazyItem = [];
    lazyItemIndex = 0;
  }

  Future<void> fetchAndSetItems() async {
    var url = 'https://jsonplaceholder.typicode.com/posts';
    final response = await http.get(url);
    final extractedData = await json.decode(response.body) as List<dynamic>;
    if (extractedData == null) {
      return;
    }

    final List<CardItem> responseData = [];
    extractedData.forEach((objectResponse) {
      responseData.add(
        CardItem(
          id: objectResponse['id'],
          title: objectResponse['title'],
          imageUrl:
              'https://images.pexels.com/photos/3690052/pexels-photo-3690052.jpeg?auto=compress&cs=tinysrgb&dpr=2&h=750&w=1260',
        ),
      );
    });
    _items = responseData;
    fetchTenItems();
    notifyListeners();
  }
}

global.h 更改为:

/* UINT2 defines a two byte word */
typedef unsigned short int UINT2;

/* UINT4 defines a four byte word */
typedef unsigned long int UINT4;