最近在研究国密bouncycastle国密加解密算法。

用的是csdn上 大神基于140的版本,我下载了163的最新版,发现好多ECPoint.getX()和ECPoint.getY()方法不存在,改成了ECPoint.getAffientX()(PS:这个函数什么意思,我也没有搞清楚……^_^)结果,运行测试用例失败,改成了140版本,结果成功了。

在测试用例中,发现加密后的byte字节,先转换成string,再转换成byte进行解密,出来的数据跟明文不一样,研究了半天,才发现问题出在这里。查阅了大神的方法,改成由BASE64Encoder转换成字符串。再由BASE64解码成字节。最后成功。可能是编码不同导致的。

正确代码如下:

        // 国密规范正式私钥String prik = "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94";// 国密规范正式公钥String pubk = "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A";System.out.println("加密: ");byte[] cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);String data = new sun.misc.BASE64Encoder().encodeBuffer((cipherText));System.out.println(data);System.out.println("解密: ");byte[] t = new sun.misc.BASE64Decoder().decodeBuffer(data);byte[] decrypt = SM2Utils.decrypt(Util.hexToByte(prik), t);System.out.println("--------------------" + Util.byteToString(decrypt));String d = new String(SM2Utils.decrypt(Util.hexToByte(prik), cipherText));System.out.println(d);FileToByteArray.BetyToFile("F:" + File.separator + "0123.txt",d.getBytes());

之前错误的代码如下:

        // 国密规范正式私钥String prik = "3690655E33D5EA3D9A4AE1A1ADD766FDEA045CDEAA43A9206FB8C430CEFE0D94";// 国密规范正式公钥String pubk = "04F6E0C3345AE42B51E06BF50B98834988D54EBC7460FE135A48171BC0629EAE205EEDE253A530608178A98F1E19BB737302813BA39ED3FA3C51639D7A20C7391A";System.out.println("加密: ");byte[] cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);String data = Util.byteToString(cipherText);System.out.println(data);System.out.println("解密: ");byte[] t = data.getBytes();byte[] decrypt = SM2Utils.decrypt(Util.hexToByte(prik), t);System.out.println("--------------------" + Util.byteToString(decrypt));String d = new String(SM2Utils.decrypt(Util.hexToByte(prik), cipherText));System.out.println(d);FileToByteArray.BetyToFile("F:" + File.separator + "0123.txt",d.getBytes());

其中Util.byteToString方法如下:

/*** 字节数组转为普通字符串(ASCII对应的字符)* * @param bytearray*            byte[]* @return String*/public static String byteToString(byte[] bytearray) {String result = "";char temp;int length = bytearray.length;for (int i = 0; i < length; i++) {temp = (char) bytearray[i];result += temp;}return result;}

字节与字符串之间的转化相关推荐

  1. java fastjson vector转为json_java对象与Json字符串之间的转化(fastjson)

    public class test { public static void main(string[] args) { // 实现java对象与json字符串之间的转化 // 1. person对象 ...

  2. java对象与Json字符串之间的转化(fastjson)

    1. 首先引入jar包 在pom.xml文件里加入下面依赖: <dependency><groupId>com.alibaba</groupId><artif ...

  3. 字符、字节、字符串之间的相互转换

    字符与字符串 字符转字符串 String有两个char类型的构造函数 1.public String(char value[])//将字符数组中的所有内容变为字符串 char[] arr = {'a' ...

  4. js中的json对象和字符串之间的转化

    字符串转对象(strJSON代表json字符串)    var obj = eval(strJSON);    var obj = strJSON.parseJSON();    var obj = ...

  5. 整型数与字符串之间的转化

     atof(将字符串转换成浮点型数)  相关函数  atoi,atol,strtod,strtol,strtoul 表头文件  #include <stdlib.h> 定义函数  do ...

  6. json对象和json字符串之间的转化

    json字符串----->json对象 使用JSON.parse()函数 var jsonStr = '{"name":"Winnie","ag ...

  7. UTC时间戳-时间字符串之间互相转化

    1,标准时间准换成时间戳 int standard_to_stamp(char *str_time)   {           struct tm stm;           int iY, iM ...

  8. 软件的基本是要处理好”算法“及其基础(一)流-字-字符(包括某个数字、字母、符号和某个汉字等)-字符串-字节动态数组-字节-整数之间的转化关系和算法

    目录 软件的基本是要处理好"算法"及其基础(一): 流->计算机字->字符(包括某个数字.字母.符号和某个汉字等)->字符串->字节动态数组->字节- ...

  9. C#字节数组和字符数组与字符串之间的转换

    1.marshal类,提供了一些方法集合,如分配非托管内存,拷贝非托管内存,转换托管和非托管类型,以及一些和非托管代码交互的杂类方法 //分配非托管内存 IntPtr hglobal = Marsha ...

最新文章

  1. 驰骋工作流程底层的API开发接口-重要的
  2. Java虚拟机运行时的数据区域
  3. 两分钟倒计时(Python)
  4. 前端学习(2169):vue-router安装和配置方式
  5. git cherry-pick 复制其他分支内容到当前分支
  6. 赞!图像生成PyTorch库火了,涵盖18+ SOTA GAN实现
  7. rman report list crosscheck delete -rman常用命令。
  8. 解决Azure中COULD NOT LOAD FILE OR ASSEMBLY问题
  9. C#控件的闪烁问题解决方法总结
  10. 照相馆里的魔术师-数码照片处理大全二
  11. mysql同步多主,MySQL多主一从同步配置
  12. python音乐推荐系统的设计与实现_个性化音乐推荐系统设计与实现
  13. 020.3.25普及C组 母鸡下蛋(hen)【纪中】【模拟】
  14. Angular sort descending
  15. 捷普服务器群组防护系统,捷普入侵防御系统
  16. C++ 输出cout
  17. 数学规划模型(一):数学规划模型的基本知识
  18. unity关于中文字体显示问题
  19. kotlin map和Json转换,Json解析
  20. html5游戏 美术,cocos2d-html5游戏学习之绘画小熊

热门文章

  1. 【算法学习】找素数的几种算法: 简单穷举, 埃氏筛法, 欧氏筛法, 从O(n2)到O(n)
  2. 零基础 6 个月学会英语 - 6 个月从 0 学会英语 - Chris Lonsdale - 学习视频
  3. qq飞车登录不上连接服务器未响应,QQ飞车手游无法登录怎么办 卡在登录界面无法进入...
  4. c语言线段树建树程序,C++算法 线段树
  5. 程序员一年工作经验之谈
  6. 谁说MAC原生无法玩游戏---START-腾讯云游戏-开启MAC,低配WIN以及TV玩网游新时代
  7. 【Turtle表白系列】你为什么还单身 ?因为昨天才遇见你。(爱心升级版本来袭)
  8. 给排水计算机应用参考文献,给排水专业专著参考文献 给排水专业外文文献怎么找...
  9. 谷歌seo外链预算方案,影响谷歌反向链接成本的因素
  10. 第一次ACM赛后总结及感悟