我有以下代码:
BigInteger d = new BigInteger(1,NFCUtil.hexStringToByteArray(IssPrivKey));
BigInteger n = new BigInteger(1,NFCUtil.hexStringToByteArray(IssPubKeyMod));
BigInteger X = new BigInteger(1,NFCUtil.hexStringToByteArray(unsignedPhoneCert));
BigInteger iccCertBI = X.modPow(d, n);
final String iccCert = iccCertBI.toString(16);
System.out.println("\nSigned Certificate: (int)" + iccCertBI +
"\nSigned Certificate (hex): "+iccCert +
"\nsigned Cert length: "+iccCert.length());
我正在做的是使用私有(private)指数和公共(public)模数对字符串进行签名。所有长度均为 288 个字符或 144 个字节。关键是当我将它用于以下字符串时:
//Length 144
final String unsignedTerCert="6A04846983677983FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF121" +
"3AFAFAF01018001BDB011D89730D7958DCAF0D34A4668A65073F2766BAC3C3E7D551211A" +
"1D7896085F1F4FDAA9A256579B0D4D6B1C7CF6C88D318886C55FB3CA91DB721376797058" +
"F482A51A363B92A89DA81BB6A7FFBB6F8C8E109E5909EFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
"FFFFFFFFFFFFFBC";
它返回一个长度为 288 个字符或 144 字节的字符串,正如我所期望的那样。
但是使用它:
//Length 144
final String unsignedPhoneCert="6A0400112233445566778899011401020301018001AE0A3CCBF6B1A997E4A4AEC7EDA6697F6B73C2EC18F8E3403F83237BD9863B4CD0BE0EBC2A8E3FB140251935F1D4EAEF2D7801FFC2CF36328E234676F96883BAB6547F82FE02455B59B6952231B130EE70980B74456168AD2A511A00448BFEA62593DCF9F3D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC";
返回一个长度为 287 个字符的字符串。
所以我的问题是,是不是 BigInteger toString(16) 方法中有什么东西导致了这个问题?
注意。我仍然可以使用公钥博览会从 BigInteger 中很好地解密它们,所以这就是让我认为这与 .toString() 方法有关的原因。
如有任何帮助/提示,我们将不胜感激。
编辑:这是我从不正确的输出中得到的输出:
Expo:36652731434641292350412815683229009979770975413220344544898857375896901092978000426765621805499026545042319009684553729382562239973283276192079521889464379604341193094271888918244826201023503324034315850394178807890994288745747556760470026279678747937975742329807945656583328292494373708777822442236249197245972251059241540578219194613740104635899
X:25332900759103924912689760614898214526937827890939506310067994686010108648336498000719255096072122266248508522922053911850606613923138698430079380374971383359222723175609119386369637533489684435824557964231714784677160255389973258884831385632708921103814163273457386881057406862373463121304854072959526597286211022281774584184894225094204257730492
X (hex):6a0400112233445566778899011401020301018001ae0a3ccbf6b1a997e4a4aec7eda6697f6b73c2ec18f8e3403f83237bd9863b4cd0be0ebc2a8e3fb140251935f1d4eaef2d7801ffc2cf36328e234676f96883bab6547f82fe02455b59b6952231b130ee70980b74456168ad2a511a00448bfea62593dcf9f3d9ffffffffffffffffffffffffffffffffffffffffbc
Phone Signed Certificate: (int)2621041784071301050954845366555843081386290833242762939438653553587304361236513516037765146640763105648748143029523335470875071401132351534501879861341081099809142476414060273707263492268408647346182500147665413648376803840594353667155297685676942776395991299461798048817170064783101287983256626056086159016336001344190438106860395808579588320414
Phone Signed Certificate (hex): af802ec9b412c2e223e28cd0e540255b18351d570e24690b1b441f6e084afb3a03a6a1a52ec4268d9dacf47385222011a977994c9dc521dc4ca82f20f4345ee8697a1cc269931211640efe7b6d29c728283aa823525887f09dbc6df37f3e1a6ec4718ccbb31778d813e4375d89631503dc785c9c9eb4770e918a3cc37c90b6d75135d8c32c299d8096d4bd88199ec9e
Phone signed Cert length: 287
正确的是:
Expo:36652731434641292350412815683229009979770975413220344544898857375896901092978000426765621805499026545042319009684553729382562239973283276192079521889464379604341193094271888918244826201023503324034315850394178807890994288745747556760470026279678747937975742329807945656583328292494373708777822442236249197245972251059241540578219194613740104635899
X:25333383310317922886770001828148668452338535025796085964448660925847832365078972818630528414968514941209307982589233259227108935074767908506952878286644207041412726931112453402165128539381501316868062159358826581046954850027043009445846574678562969939333097216245548333577227051225788418683968135213089604118672442657593365304099582656739524214716
X (hex):6a04846983677983ffffffffffffffffffffffffffffffffffffff1213afafaf01018001bdb011d89730d7958dcaf0d34a4668a65073f2766bac3c3e7d551211a1d7896085f1f4fdaa9a256579b0d4d6b1c7cf6c88d318886c55fb3ca91db721376797058f482a51a363b92a89da81bb6a7ffbb6f8c8e109e5909effffffffffffffffffffffffffffffffffffffffbc
Phone Signed Certificate: (int)21432015836175396598983285831512248305709761145636099501338782160749145447638782142594889169355603470185237110648036474961995187557563452989823081731645192439732733979910407327875747461117018365485531108584396064685039171356192052384601156809092826847482291755881176360680132279291900385137689881779233791387498805975645418591098518000313085841654
Phone Signed Certificate (hex): 59b0d96873fa0895d52d3f63475dd224c0a73bc34439e369a7b5eea88fd65b52464317b88642016421e9054d7e19dfc9cac7ffda07faea496268ea133cd83dc45959de61b1aa4b26a46ab47c6b8f4f2c092e914f0d940e9082b800119eba061bf7a654c022bc9c601a2d02a9775fb2cd23e532146443d7236c2ab301478fc9c59bbd984792d95d1db1a8d2ce80add0f6
Phone signed Cert length: 288
最佳答案
BigInteger.toString(int) 不会用前导零填充其输出。如果您想要固定宽度的输出,请尝试 String.format:
String.format("%0288x", iccCertBI)
添加
格式字符串分解如下:
% 标记格式说明符的开始,它告诉格式化程序将相应的参数放在输出中的这个位置。0 告诉格式化程序使用零填充;如果没有这个,它会使用空格进行填充。288 告诉格式化程序在输出中生成 最少 288 个字符(不确定您是否可以指定最大值)x 告诉格式化程序将相应的参数转换为十六进制整数(任何数字基元或类型,例如 int、long . 或 BigInteger,将在这里工作)。String.format 是将常见数据类型格式化为字符串的强大工具,您绝对应该阅读 Javadoc .
关于java - Java 中的 RSA 和 BigInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10112199/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr
我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢
我注意到像bundler这样的项目在每个specfile中执行requirespec_helper我还注意到rspec使用选项--require,它允许您在引导rspec时要求一个文件。您还可以将其添加到.rspec文件中,因此只要您运行不带参数的rspec就会添加它。使用上述方法有什么缺点可以解释为什么像bundler这样的项目选择在每个规范文件中都需要spec_helper吗? 最佳答案 我不在Bundler上工作,所以我不能直接谈论他们的做法。并非所有项目都checkin.rspec文件。原因是这个文件,通常按照当前的惯例,只
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA