
使用代码签名证书,保证移动应用程序与软件安全
网络移动智能手机调查报告指出,智能手机应用程序正在为更多互联网用户提供多样化服务,但随着这些崭新的应用带来许多新兴的商业行为时,同时却也带来许多安全漏洞和恶意代码的风险,威胁着网友使用行为。面对互联网时代的假身份、恶意欺诈、钓鱼网站等诚信风险和木马、病毒、隐私窃取等安全威胁,智能手机应用程序正为互联网带来“诚信”和“信任”的两大挑战,如何确保网站经营者的诚信,以及如何获得网民的信任已经成为应用程序开发业者必须要解决的迫切问题。
根据我们所进行的市场观察,国际知名的移动 *** 作系统平台(例如Windows® Mobile 7)以及流行的应用程序商店(APP store)已经陆续实施代码签名证书技术,用以解决日益严重的互联网安全问题。这些移动平台及应用程序商店通过采用代码签名证书来确保用户日益依赖的移动设备应用程序的安全性。
对支付宝进行设置再回主页面进行转义,具体步骤如下。
支付宝APP支付(Java后台生成签名具体步骤)
/
支付宝支付
@param orderId 订单编号
@param actualPay 实际支付金额
@return
/
private String getOrderInfoByAliPay(String orderId,float actualPay) {
//回调页面
String ali_call_back_url = propertiesServiceALI_CALL_BACK_URL;
String seller_id = propertiesServiceSELLER_ID;//商户编号
String[] parameters={
"service=\"mobilesecuritypaypay\"",//固定值(手机快捷支付)
"partner=\"2088421544444\"",//合作身份者ID(16位)
"_input_charset=\"utf-8\"",
"notify_url=\""+ali_call_back_url+"\"",//通知地址
"out_trade_no=\""+orderId+"\"",//商户内部订单号
"subject=\"测试\"",//测试
"payment_type=\"1\"",//固定值
"seller_id=\""+seller_id+"\"",//账户邮箱
"total_fee=\""+"001"+"\"",//支付金额(元)
"body=\"订单说明\"",//订单说明
"it_b_pay=\"30m\""(订单过期时间 30分钟过期无效)
};
String signOrderUrl = signAllString(parameters);
return signOrderUrl;
}
/
支付宝签名
@param array
@return
/
private String signAllString(String [] array){
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < arraylength; i++) {
if(i==(arraylength-1)){
sbappend(array[i]);
}else{
sbappend(array[i]+"&");
}
}
Systemoutprintln(sbtoString());
String sign = "";
try {
sign = URLEncoderencode(RSAsign(sbtoString(), AlipayConfigprivate_key, "utf-8"), "utf-8");//private_key私钥
} catch (UnsupportedEncodingException e) {
eprintStackTrace();
}
sbappend("&sign=\""+sign+"\"&");
sbappend("sign_type=\"RSA\"");
return sbtoString();
}
package comalipaysign;
import javaxcryptoCipher;
import javaioByteArrayInputStream;
import javaioByteArrayOutputStream;
import javaioInputStream;
import javasecurityKeyFactory;
import javasecurityPrivateKey;
import javasecurityPublicKey;
import javasecurityspecPKCS8EncodedKeySpec;
import javasecurityspecX509EncodedKeySpec;
public class RSA{
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
/
RSA签名
@param content 待签名数据
@param privateKey 商户私钥
@param input_charset 编码格式
@return 签名值
/
public static String sign(String content, String privateKey, String input_charset)
{
try
{
byte[] decode = Base64decode(privateKey);
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(decode );
KeyFactory keyf= KeyFactorygetInstance("RSA");
PrivateKey priKey= keyfgeneratePrivate(priPKCS8);
javasecuritySignature signature = javasecuritySignaturegetInstance(SIGN_ALGORITHMS);
signatureinitSign(priKey);
signatureupdate( contentgetBytes(input_charset) );
byte[] signed = signaturesign();
return Base64encode(signed);
}
catch (Exception e)
{
eprintStackTrace();
}
return null;
}
/
RSA验签名检查
@param content 待签名数据
@param sign 签名值
@param ali_public_key 支付宝公钥
@param input_charset 编码格式
@return 布尔值
/
public static boolean verify(String content, String sign, String ali_public_key, String input_charset)
{
try
{
KeyFactory keyFactory = KeyFactorygetInstance("RSA");
byte[] encodedKey = Base64decode(ali_public_key);
PublicKey pubKey = keyFactorygeneratePublic(new X509EncodedKeySpec(encodedKey));
javasecuritySignature signature = javasecuritySignature
getInstance(SIGN_ALGORITHMS);
signatureinitVerify(pubKey);
signatureupdate( contentgetBytes(input_charset) );
boolean bverify = signatureverify( Base64decode(sign) );
return bverify;
}
catch (Exception e)
{
eprintStackTrace();
}
return false;
}
/
解密
@param content 密文
@param private_key 商户私钥
@param input_charset 编码格式
@return 解密后的字符串
/
public static String decrypt(String content, String private_key, String input_charset) throws Exception {
PrivateKey prikey = getPrivateKey(private_key);
Cipher cipher = CiphergetInstance("RSA");
cipherinit(CipherDECRYPT_MODE, prikey);
InputStream ins = new ByteArrayInputStream(Base64decode(content));
ByteArrayOutputStream writer = new ByteArrayOutputStream();
//rsa解密的字节大小最多是128,将需要解密的内容,按128位拆开解密
byte[] buf = new byte[128];
int bufl;
while ((bufl = insread(buf)) != -1) {
byte[] block = null;
if (buflength == bufl) {
block = buf;
} else {
block = new byte[bufl];
for (int i = 0; i < bufl; i++) {
block[i] = buf[i];
}
}
writerwrite(cipherdoFinal(block));
}
return new String(writertoByteArray(), input_charset);
}
/
得到私钥
@param key 密钥字符串(经过base64编码)
@throws Exception
/
public static PrivateKey getPrivateKey(String key) throws Exception {
byte[] keyBytes;
keyBytes = Base64decode(key);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactorygetInstance("RSA");
PrivateKey privateKey = keyFactorygeneratePrivate(keySpec);
return privateKey;
}
}
获取JAVA进程:
package comtest;import javalangmanagementManagementFactory;
import javalangmanagementRuntimeMXBean;
public class Target {
public static void main(String[] args) throws InterruptedException {
Systemoutprintln(getProcessID());
while(true) {
Threadsleep(10000);
}
}
public static final int getProcessID() {
RuntimeMXBean runtimeMXBean = ManagementFactorygetRuntimeMXBean();
Systemoutprintln(runtimeMXBeangetName());
return IntegervalueOf(runtimeMXBeangetName()split("@")[0])
intValue();
}
}
获取所有正在运行着的Java进程
package comtest;import javautilHashSet;
import javautilSet;
import sunjvmstatmonitorMonitoredHost;
import sunjvmstatmonitorMonitoredVm;
import sunjvmstatmonitorMonitoredVmUtil;
import sunjvmstatmonitorVmIdentifier;
public class ProcessID {
public static void main(String[] args) throws Exception {
// 获取监控主机
MonitoredHost local = MonitoredHostgetMonitoredHost("localhost");
// 取得所有在活动的虚拟机集合
Set<> vmlist = new HashSet<Object>(localactiveVms());
// 遍历集合,输出PID和进程名
for(Object process : vmlist) {
MonitoredVm vm = localgetMonitoredVm(new VmIdentifier("//" + process));
// 获取类名
String processname = MonitoredVmUtilmainClass(vm, true);
Systemoutprintln(process + " ------> " + processname);
}
}
}
可以直接根据类找到对应Java进程ID的方法
package comtest;import javanetURISyntaxException;
import javautilHashSet;
import javautilSet;
import sunjvmstatmonitorMonitorException;
import sunjvmstatmonitorMonitoredHost;
import sunjvmstatmonitorMonitoredVm;
import sunjvmstatmonitorMonitoredVmUtil;
import sunjvmstatmonitorVmIdentifier;
public class ProcessID {
public static void main(String[] args) throws Exception {
int pid = getProcess(Targetclass);
Systemoutprintln("PID: "+pid);
}
public static int getProcess(Class<> cls) throws MonitorException, URISyntaxException {
if(cls == null) {
return -1;
}
// 获取监控主机
MonitoredHost local = MonitoredHostgetMonitoredHost("localhost");
// 取得所有在活动的虚拟机集合
Set<> vmlist = new HashSet<Object>(localactiveVms());
// 遍历集合,输出PID和进程名
for(Object process : vmlist) {
MonitoredVm vm = localgetMonitoredVm(new VmIdentifier("//" + process));
// 获取类名
String processname = MonitoredVmUtilmainClass(vm, true);
if(clsgetName()equals(processname)) {
return ((Integer)process)intValue();
}
}
return -1;
}
}
其实对于同名不同类、同类不同名的方法,方法签名的意义并不是很大,但是对于重载方法来说,方法签名的意义就十分巨大了。由于重载方法之间的方法名是相同的,那么我们势必要从构成方法的其他几个要素中找到另一个要素与方法名组成能够唯一标示方法的签名,方法体当然不予考虑。那么就是形参列表和返回值了,但是由于对于调用方法的人来说,方法的形参数据类型列表的重要程度要远远高于返回值,所以方法签名就由方法名+形参列表构成,也就是说,方法名和形参数据类型列表可以唯一的确定一个方法,与方法的返回值一点关系都没有,这是判断重载重要依据,所以,以下的代码是不允许的。
public long aaaa(){
}
public int aaaa(){
}
接下来,就来解释一下,当程序出现NoSuchMethodException时,JVM为我们提供的异常信息究竟是什么意思。首先我们先看几个方法以及他们的方法签名:
public void test1(){} test1()V
public void test2(String str) test2(Ljava/lang/String;)V
public int test3(){} test3()I
从以上三个例子,我们就可以很简单的看出一些小小的规律:
JVM为我们提供的方法签名实际上是由方法名(上文的例子为了简单没有写出全类名)、形参列表、返回值三部分构成的,基本形式就是:
全类名方法名(形参数据类型列表)返回值数据类型
我们知道了JVM提供的方法签名的结构之后还是不够,因为JVM是并没有特别明确的将数据类型写出来,而是提供了特殊的表示法,下表就是对特殊表示字符、字母与对应数据类型的关系:
Java方法签名中特殊字符/字母含义
特殊字符 数据类型 特殊说明
V void 一般用于表示方法的返回值
Z boolean
B byte
C char
S short
I int
J long
F float
D double
[ 数组 以[开头,配合其他的特殊字符,表示对应数据类型的数组,几个[表示几维数组
L全类名; 引用类型 以L开头、;结尾,中间是引用类型的全类名
进程号也就是UNIX类OS中的,Process ID
可是Process ID的概念只有在UNIX类的 *** 作系统中才有,Java作为一种多平台的程序语言,在JDK的接口中并不提供“进程ID”(Process ID)这种OS独有的概念。
如果要结束程序,可以使用Systemexit()
如果非要得到自己的Process ID,唯一的方法就是在shell取得Process ID,然后Java在通过某种方式取得相应的Process ID。
以上就是关于app java源码中名称和签名在哪个文件全部的内容,包括:app java源码中名称和签名在哪个文件、Java如何生成支付宝RSA2签名、java代码——返回当前计算机所有进程ID怎么做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)