免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6987 | 回复: 7
打印 上一主题 下一主题

[C] 请教疑问!读取png图片内容到字符串,类似java的byte数组 [复制链接]

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
1 [报告]
发表于 2018-02-23 19:46 |显示全部楼层
ret[0 ~ 8]
[137][80][78][71][13][10][26][10][0][0]

80 P
78 N
71 G
ret[8] = 0 又称结束符
不可见 13,10,26,10

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
2 [报告]
发表于 2018-02-28 15:25 |显示全部楼层
回复 3# ryr1990

ret[0 ~ 7] 8 bytes == 签名
[137][80][78][71][13][10][26][10]

验签只要读取 8 bytes就可以了, <不需要获得文件所有内容byte数组>

简单的验签

  1. #include <stdbool.h>

  2. bool isPng(char *pngByteArray){
  3.     #define ISPNG 727905341920923785LL
  4.     long long check = *(long long *)pngByteArray;
  5.     return check == ISPNG;
  6. }
复制代码



...
/* 验签 */
  1. bool what = isPng(ret);
复制代码

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
3 [报告]
发表于 2018-03-01 19:11 |显示全部楼层
回复 5# ryr1990

是不行


我指的签名是

维基百科:
PNG文件包括8字节文件署名(signature)(89 50 4E 47 0D 0A 1A 0A,十六进制),用来识别PNG格式。

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
4 [报告]
发表于 2018-03-01 19:17 |显示全部楼层
验签(byte数组);

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
5 [报告]
发表于 2018-03-02 19:16 |显示全部楼层
回复 8# ryr1990

ret 已经是完整的byte数组!!!

  1. for (int i = 0; i < 8; i++)
  2.     printf ("%02X ", (unsigned char)ret[i]);
复制代码



输出:
89 50 4E 47 0D 0A 1A 0A




其他我不懂.
等待路过大牛的回答

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
6 [报告]
发表于 2018-03-02 19:38 |显示全部楼层
本帖最后由 dorodaloo 于 2018-03-03 09:03 编辑

你的验签函数如何写的?
具体看代码才能知道

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
7 [报告]
发表于 2018-03-05 11:27 |显示全部楼层
回复 11# ryr1990




ret[0 ~ 8]
[137][80][78][71][13][10][26][10][0]

ret[8] = 0 又称结束符, 表示字符串结束

strlen(ret) 等于 8, 不等于 byte array 实际长度.

png应使用实际长度,不可使用 strlen

char good[] = {'h', 'e', 'l', 'l', 'o', '\0'};
char bad[] = {'h', 'e', '\0', 'l', 'l', 'o', '\0'};

printf("good strlen = %d\n", strlen(good));
printf("bad strlen = %d\n", strlen(bad));
good strlen = 5
bad strlen = 2

论坛徽章:
6
数据库技术版块每日发帖之星
日期:2015-11-27 06:20:00程序设计版块每日发帖之星
日期:2015-12-01 06:20:00每日论坛发贴之星
日期:2015-12-01 06:20:0015-16赛季CBA联赛之佛山
日期:2017-03-26 23:38:0315-16赛季CBA联赛之江苏
日期:2017-07-17 10:08:4415-16赛季CBA联赛之北京
日期:2018-03-04 17:01:50
8 [报告]
发表于 2018-03-06 13:26 |显示全部楼层
回复 14# ryr1990

那个长度dataLength参数好像没用到,应该不是strlen导致的问题。




    SHA1_Update(&c, pData, strlen((char*)pData));


    strcpy(resp, body); // 0 又称结束符, 表示字符串结束


    char *body = malloc(BUFFER_SIZE);
    memcpy(body, data+(strlen(data)-atoi(contentLen)), atoi(contentLen));


    memcpy(signBuf, data, strlen(data));
    memcpy(timeBuf, data, strlen(data));
    memcpy(contentLenBuf, data, strlen(data));


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP